[POJ3254] Corn Fields

来源:互联网 发布:数据库开发需要学什么 编辑:程序博客网 时间:2024/05/17 07:13

炮兵阵地弱化版 没什么好说的= = 做完炮兵阵地这就一水题

#include<cstdio>#include<algorithm>#include<cstring>const int MAXN = 10;const int p =  100000000;const int maxs = (1 << MAXN);int Map[MAXN+10], ID[maxs+10], d[MAXN+10][maxs+10], idcnt;int n, m;bool ok(int x){if(x & (x << 1)) return false;return true;}int main(){while(scanf("%d%d", &n, &m) == 2 && n + m){int S = 1 << m;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++){int x;scanf("%d", &x);if(!x) Map[i] |= (1 << j);}for(int i = 0; i < S; i++)if(ok(i))ID[idcnt++] = i;for(int i = 0; i < idcnt; i++) if(!(Map[0] & ID[i]))d[0][i] = 1;for(int row = 1; row < n; row++){for(int i = 0; i < idcnt; i++){if(Map[row] & ID[i]) continue;d[row][i] = 0;for(int j = 0; j < idcnt; j++){if(ID[i] & ID[j]) continue;if(Map[row-1] & ID[j]) continue;d[row][i] = (d[row][i] + d[row-1][j]) % p;}}}int Ans = 0;for(int i = 0; i < idcnt; i++)Ans = (Ans + d[n-1][i]) % p;printf("%d\n", Ans);}}


0 0