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;
}

  

posted @ 2018-10-29 10:11  ~Silent  阅读(185)  评论(0编辑  收藏  举报
Live2D