poj3254(状态压缩)

来源:互联网 发布:chrome linux 32 编辑:程序博客网 时间:2024/05/21 19:32


这是我的第一道状态压缩题目,思路神马的都不是我自己的,不过我还是硬着头皮自己把代码敲完!

#include<cstdio>#include<iostream>#define MOD 100000000using namespace std;int num[13],dp[13][150],state[150],n,m;int tot,cnt;bool judge(int x){return !(x&(x<<1));}void init(){cnt=0;tot=(1<<m);for(int i=0;i<tot;i++)if(judge(i))state[++cnt]=i;}bool fit(int x,int k){return !(x&num[k]);}int main() {int i,j,k,u;while(~scanf("%d%d",&n,&m)){init();memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){num[i]=0;for(j=1;j<=m;j++){scanf("%d",&u);if(u==0)num[i]+=(1<<m-j);}}for(i=1;i<=cnt;i++)if(fit(state[i],1))dp[1][i]=1;for(i=2;i<=n;i++){for(j=1;j<=cnt;j++){if(!fit(state[j],i))continue;for(k=1;k<=cnt;k++){if(!fit(state[k],i-1))continue;if(state[k]&state[j])continue;dp[i][j]=(dp[i][j]+dp[i-1][k])%MOD;}}}int ans=0;for(i=1;i<=cnt;i++)ans=(ans+dp[n][i])%MOD;cout<<ans<<endl;}return 0;}


0 0
原创粉丝点击