luogu_1879 [USACO06NOV]玉米田Corn Fields
#include <cstdio> #include <iostream> #define reg register using namespace std; const int N=14; const int S=(1<<13)+10; const int mod=1e8; int n,m,f[N][S],a[N],s,g[S],t[N],ans; int main(){ scanf("%d%d",&n,&m); for(reg int i=1;i<=n;i++) for(reg int j=1;j<=m;j++){ int x; scanf("%d",&x); t[i]=(t[i]<<1)+x; } s=1<<m; for(reg int i=0;i<s;i++)g[i]=(!(i<<1&i) && !(i>>1&i)); f[0][0]=1; for(reg int i=1;i<=n;i++) for(reg int j=0;j<s;j++) if(g[j] && (j&t[i])==j) for(reg int k=0;k<s;k++) if(!(j&k))f[i][j]+=f[i-1][k]; for(reg int i=0;i<s;i++)ans+=f[n][i],ans%=mod; printf("%d\n",ans); return 0; }