今天撸了一天的状态压缩DP。。。。。 。。。没有然后了。。。感觉稍有些思路了,,,但是不知道为什么这道题答案出不来,感觉自己在DP的初始化上面还有些问题。。。
先挂着代码吧。。。
#include <stdio.h> #include <string.h> int dp[13][5000],que[13],map[13]; int ok(int x) { if(x&(x<<1)) return 0; return 1; } int max(int x,int y) { if(x>y) return x; else return y; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i,j,k; int ans=0,a,top=0; for(i=0;i<n;i++) for(j=0;j<m;j++) { scanf("%d",&a); map[i]=(map[i]<<1)+!a; } for(i=0;i<(1<<m);i++) if(ok(i)) que[top++]=i; memset(dp,0,sizeof(dp)); for(i=0;i<top;i++) dp[0][que[i]]=1; for(i=0;i<n;i++) { for(j=0;j<top;j++) { if(que[j]&map[i]) continue; for(k=0;k<top;k++) { if(que[k]!=que[j]) {dp[i][que[j]]+=dp[i-1][que[k]];printf("**%d\n",dp[i][que[j]]);} } } } for(i=0;i<top;i++) ans=max(ans,dp[n-1][que[i]]); printf("%d\n",ans); } return 0; }