码迷,mamicode.com
首页 > 其他好文 > 详细

状压dp

时间:2016-07-04 23:30:21      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:

poj3254:裸

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
const int mod=100000000;
int state[1005],dp[20][1005],cnt[20];
int main(){
	int n,m;
	while(scanf("%d%d",&n,&m)==2){
		int cur=0;clr(cnt,0);clr(dp,0);
		for(int i=0;i<(1<<m);i++)
		  if(!(i&(i<<1))) state[++cur]=i;
		rep(i,n)	
		    rep(j,m) {
			    int tmp;scanf("%d",&tmp);
				if(!tmp) cnt[i]+=(1<<(m-j));
			}
		rep(i,cur) if(!(state[i]&cnt[1]))dp[1][i]=1;
		rep(i,n){
			rep(j,cur){
				if(cnt[i]&state[j]) continue;
				rep(k,cur) {
					if(cnt[i-1]&state[k]) continue;
					if(state[k]&state[j]) continue;
					dp[i][j]=(dp[i][j]+dp[i-1][k])%mod;
				}
			}
		}
		int ans=0;
		rep(i,cur) ans=(ans+dp[n][i])%mod;
		printf("%d\n",ans);
	}
	return 0;
}

  

状压dp

标签:

原文地址:http://www.cnblogs.com/fighting-to-the-end/p/5641824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!