骨牌覆盖去除切割线的情况(DP+容斥原理)
来源:互联网 发布:电气原理图软件 编辑:程序博客网 时间:2024/04/28 22:53
题目要求给出N*M的矩阵,用1*2和2*1的骨牌覆盖,不出现切割线的情况有多少。
这题可以先用轮廓线DP求出任意矩阵一共有多少种放法,
预处理出任意矩形大小的方案数
不过我怀疑这部分不提前打表的过不了
第二部分是一个容斥
先对列容斥,用状压的方式枚举出所有列的分割情况
然后计算,当前列分割情况下,行没有分割的方案数
然后再用容斥,奇加偶减即能得出答案
而
其中
其中
减去每一个前
减去这些互斥的非法方案,剩下的即为宽度为
#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<math.h>#define LL long long intLL dp[17];const int MOD = 1e9 + 7;LL RES[17][17];LL ANS[17][17];int block[17];int blocknum;LL solve(int, int);void Init();int main(){//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);Init();int n, m;while (~scanf("%d %d", &n, &m)){printf("%lld\n", solve(n, m));}}LL solve(int n, int m){if ((n & 1) && (m & 1)){return 0;}LL ans = 0;for (int k = 0; k < (1 << (m - 1)); ++k){int d = 1;//竖线隔开的块有多少blocknum = 0;//被隔开的方块数for (int i = 0; i < m - 1; ++i){if (k & (1 << i)){block[blocknum++] = d;d = 1;}else++d;}block[blocknum++] = d;dp[0] = 0;//当前行到0行没有横线的情况for (int i = 1; i <= n; ++i){LL max = 1;for (int j = 0; j < i; ++j){LL t = 1;for (int I = 0; I < blocknum; ++I){t = (t*RES[i - j][block[I]]) % MOD;}if (!j){dp[i] = t;}else{dp[i] = (dp[i] - dp[j] * t) % MOD;}}}if (blocknum & 1)ans = (ans + dp[n]) % MOD;elseans = (ans - dp[n]) % MOD;}return (ans + MOD) % MOD;}void Init(){RES[1][1] = 0;RES[1][2] = 1;RES[1][3] = 0;RES[1][4] = 1;RES[1][5] = 0;RES[1][6] = 1;RES[1][7] = 0;RES[1][8] = 1;RES[1][9] = 0;RES[1][10] = 1;RES[1][11] = 0;RES[1][12] = 1;RES[1][13] = 0;RES[1][14] = 1;RES[1][15] = 0;RES[1][16] = 1;RES[2][1] = 1;RES[2][2] = 2;RES[2][3] = 3;RES[2][4] = 5;RES[2][5] = 8;RES[2][6] = 13;RES[2][7] = 21;RES[2][8] = 34;RES[2][9] = 55;RES[2][10] = 89;RES[2][11] = 144;RES[2][12] = 233;RES[2][13] = 377;RES[2][14] = 610;RES[2][15] = 987;RES[2][16] = 1597;RES[3][1] = 0;RES[3][2] = 3;RES[3][3] = 0;RES[3][4] = 11;RES[3][5] = 0;RES[3][6] = 41;RES[3][7] = 0;RES[3][8] = 153;RES[3][9] = 0;RES[3][10] = 571;RES[3][11] = 0;RES[3][12] = 2131;RES[3][13] = 0;RES[3][14] = 7953;RES[3][15] = 0;RES[3][16] = 29681;RES[4][1] = 1;RES[4][2] = 5;RES[4][3] = 11;RES[4][4] = 36;RES[4][5] = 95;RES[4][6] = 281;RES[4][7] = 781;RES[4][8] = 2245;RES[4][9] = 6336;RES[4][10] = 18061;RES[4][11] = 51205;RES[4][12] = 145601;RES[4][13] = 413351;RES[4][14] = 1174500;RES[4][15] = 3335651;RES[4][16] = 9475901;RES[5][1] = 0;RES[5][2] = 8;RES[5][3] = 0;RES[5][4] = 95;RES[5][5] = 0;RES[5][6] = 1183;RES[5][7] = 0;RES[5][8] = 14824;RES[5][9] = 0;RES[5][10] = 185921;RES[5][11] = 0;RES[5][12] = 2332097;RES[5][13] = 0;RES[5][14] = 29253160;RES[5][15] = 0;RES[5][16] = 366944287;RES[6][1] = 1;RES[6][2] = 13;RES[6][3] = 41;RES[6][4] = 281;RES[6][5] = 1183;RES[6][6] = 6728;RES[6][7] = 31529;RES[6][8] = 167089;RES[6][9] = 817991;RES[6][10] = 4213133;RES[6][11] = 21001799;RES[6][12] = 106912793;RES[6][13] = 536948224;RES[6][14] = 720246619;RES[6][15] = 704300462;RES[6][16] = 289288426;RES[7][1] = 0;RES[7][2] = 21;RES[7][3] = 0;RES[7][4] = 781;RES[7][5] = 0;RES[7][6] = 31529;RES[7][7] = 0;RES[7][8] = 1292697;RES[7][9] = 0;RES[7][10] = 53175517;RES[7][11] = 0;RES[7][12] = 188978103;RES[7][13] = 0;RES[7][14] = 124166811;RES[7][15] = 0;RES[7][16] = 708175999;RES[8][1] = 1;RES[8][2] = 34;RES[8][3] = 153;RES[8][4] = 2245;RES[8][5] = 14824;RES[8][6] = 167089;RES[8][7] = 1292697;RES[8][8] = 12988816;RES[8][9] = 108435745;RES[8][10] = 31151234;RES[8][11] = 940739768;RES[8][12] = 741005255;RES[8][13] = 164248716;RES[8][14] = 498190405;RES[8][15] = 200052235;RES[8][16] = 282756494;RES[9][1] = 0;RES[9][2] = 55;RES[9][3] = 0;RES[9][4] = 6336;RES[9][5] = 0;RES[9][6] = 817991;RES[9][7] = 0;RES[9][8] = 108435745;RES[9][9] = 0;RES[9][10] = 479521663;RES[9][11] = 0;RES[9][12] = 528655152;RES[9][13] = 0;RES[9][14] = 764896039;RES[9][15] = 0;RES[9][16] = 416579196;RES[10][1] = 1;RES[10][2] = 89;RES[10][3] = 571;RES[10][4] = 18061;RES[10][5] = 185921;RES[10][6] = 4213133;RES[10][7] = 53175517;RES[10][8] = 31151234;RES[10][9] = 479521663;RES[10][10] = 584044562;RES[10][11] = 472546535;RES[10][12] = 732130620;RES[10][13] = 186229290;RES[10][14] = 274787842;RES[10][15] = 732073997;RES[10][16] = 320338127;RES[11][1] = 0;RES[11][2] = 144;RES[11][3] = 0;RES[11][4] = 51205;RES[11][5] = 0;RES[11][6] = 21001799;RES[11][7] = 0;RES[11][8] = 940739768;RES[11][9] = 0;RES[11][10] = 472546535;RES[11][11] = 0;RES[11][12] = 177126748;RES[11][13] = 0;RES[11][14] = 513673802;RES[11][15] = 0;RES[11][16] = 881924366;RES[12][1] = 1;RES[12][2] = 233;RES[12][3] = 2131;RES[12][4] = 145601;RES[12][5] = 2332097;RES[12][6] = 106912793;RES[12][7] = 188978103;RES[12][8] = 741005255;RES[12][9] = 528655152;RES[12][10] = 732130620;RES[12][11] = 177126748;RES[12][12] = 150536661;RES[12][13] = 389322891;RES[12][14] = 371114062;RES[12][15] = 65334618;RES[12][16] = 119004311;RES[13][1] = 0;RES[13][2] = 377;RES[13][3] = 0;RES[13][4] = 413351;RES[13][5] = 0;RES[13][6] = 536948224;RES[13][7] = 0;RES[13][8] = 164248716;RES[13][9] = 0;RES[13][10] = 186229290;RES[13][11] = 0;RES[13][12] = 389322891;RES[13][13] = 0;RES[13][14] = 351258337;RES[13][15] = 0;RES[13][16] = 144590622;RES[14][1] = 1;RES[14][2] = 610;RES[14][3] = 7953;RES[14][4] = 1174500;RES[14][5] = 29253160;RES[14][6] = 720246619;RES[14][7] = 124166811;RES[14][8] = 498190405;RES[14][9] = 764896039;RES[14][10] = 274787842;RES[14][11] = 513673802;RES[14][12] = 371114062;RES[14][13] = 351258337;RES[14][14] = 722065660;RES[14][15] = 236847118;RES[14][16] = 451896972;RES[15][1] = 0;RES[15][2] = 987;RES[15][3] = 0;RES[15][4] = 3335651;RES[15][5] = 0;RES[15][6] = 704300462;RES[15][7] = 0;RES[15][8] = 200052235;RES[15][9] = 0;RES[15][10] = 732073997;RES[15][11] = 0;RES[15][12] = 65334618;RES[15][13] = 0;RES[15][14] = 236847118;RES[15][15] = 0;RES[15][16] = 974417347;RES[16][1] = 1;RES[16][2] = 1597;RES[16][3] = 29681;RES[16][4] = 9475901;RES[16][5] = 366944287;RES[16][6] = 289288426;RES[16][7] = 708175999;RES[16][8] = 282756494;RES[16][9] = 416579196;RES[16][10] = 320338127;RES[16][11] = 881924366;RES[16][12] = 119004311;RES[16][13] = 144590622;RES[16][14] = 451896972;RES[16][15] = 974417347;RES[16][16] = 378503901;}
0 0
- 骨牌覆盖去除切割线的情况(DP+容斥原理)
- 骨牌覆盖(轮廓线DP)
- [BZOJ1435] [ZJOI2009] 多米诺骨牌 - 插头DP/状压DP,容斥原理
- 棋盘覆盖2(1X2骨牌 和 L型骨牌 混合铺满)(强行轮廓线DP)
- 容斥原理+ 排列组合的dp。。
- 【容斥原理+状态压缩】zjoi2009 多米诺骨牌
- poj 2411 骨牌覆盖问题 状压dp
- hdu4336 Card Collector 概率dp(或容斥原理?)
- hdu 4336 Card Collector (期望dp|容斥原理)
- BZOJ 1042(简单DP+容斥原理)
- 1042: [HAOI2008]硬币购物(dp+容斥原理)
- 【bzoj 1042】 [HAOI2008] 硬币购物(dp+容斥原理)
- BZOJ1042【HAOI2008】硬币购物(DP+容斥原理)
- [BZOJ1042][HAOI2008]硬币购物 (DP+容斥原理)
- HDU 4336 Card Collector (容斥原理||概率DP)
- bzoj 4710: [Jsoi2011]分特产 (容斥原理+DP)
- [BZOJ1042][HAOI2008]硬币购物(dp+容斥原理)
- [BZOJ2024][SHOI2009] 舞会(dp+容斥原理+高精度)
- adoquery.FilterGroup参数解释如下
- mxGraph API
- NOIP2013 货车运输 [LCA] [RMQ] [最小生成树] [ST倍增]
- osx + win7 双系统安装
- BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路
- 骨牌覆盖去除切割线的情况(DP+容斥原理)
- UVALive 7270 Osu! Master 水题
- File类的使用1
- javaweb
- 搜索树判断
- 三人行之C从零开始
- Objective C转Swift注意事项(二)值类型和协议
- 百度地图sdk的导入
- BestCoder Round #84