蒟蒻求教

P1879 [USACO06NOV] Corn Fields G

为什么不对啊
by KevinYu @ 2018-11-22 21:06:50


``` #include<cstdio> #include<cstdlib> using namespace std; const int M = 1e9; int m, n, f[13][4096], F[13], grassl[13][13]; bool state[4096];//状态是否合法 // max state: (11111111111)2 = (4095)10 int main() { scanf("%d%d",&m,&n); for (int i = 1; i <= m; i++) for (int j = 1; j <= n; j++) { scanf("%d",&grassl[i][j]); F[i] = (F[i] << 1) + grassl[i][j];//第i行转换为二进制存储于F[i] } const int MAX = 1 << n; for (int i = 0; i < MAX; i++) state[i] = ((i&(i<<1))==0) && ((i&(i>>1))==0);//不能两头牛的草地是相邻的 二进制状态是否合法 f[0][0] = 1;//荒废牧场 for (int i = 1; i <= m; i++) for (int j = 0; j < MAX; j++) if (state[j] && ((j & F[i]) == j))//j状态合法 且 有牛的地方都有草 for (int k = 0; k < MAX; k++) if ((k & j) == 0)//上下没有相邻牛 f[i][j] = (f[i][j] + f[i-1][k]) % M; int ans = 0; for (int i = 0; i < MAX; i++)//最后一行的和 ans += f[m][i], ans %= M; printf("%d",ans); return 0; } ```
by Freddie @ 2018-12-01 09:42:10


|