BZOJ 1725: [Usaco2006 Nov]Corn Fields牧场的安排
状压DP
#include<cstdio>
using namespace std;
const int mod=1e8;
int n,m,a[15][15],F[15][10005];
void memse(int x){
for (int i=0; i<(1<<m); i++)
if (F[x][i]){
for (int j=0; j<m; j++) if (!a[x][j] && i&(1<<j)) F[x][i]=0;
}
}
int main(){
scanf("%d%d",&n,&m);
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
scanf("%d",&a[i][j]);
for (int i=0; i<(1<<m); i++) if (!(i&(i>>1))) F[0][i]=1;
for (int i=0; i<n; i++){
memse(i);
for (int pre=0; pre<(1<<m); pre++)
if (F[i][pre])
for (int now=0; now<(1<<m); now++)
if (!(now&(now>>1)) && !(now&pre)) (F[i+1][now]+=F[i][pre])%=mod;
}
int ans=0;
for (int i=0; i<(1<<m); i++) (ans+=F[n-1][i])%=mod;
printf("%d\n",ans);
return 0;
}

浙公网安备 33010602011771号