蠻水的狀態壓縮
#include#include long long dp[15][(1<<12)+10]; int mark[(1<<12)+10]; int tot; int fun(int w) { int k=0; while(w>0) { if((w&1)==1) { k++; } else { if((k&1)==1) return 0; k=0; } w>>=1; } if((k&1)==1) return 0; return 1; } int fun1(int a,int b) { if((a|b)!=tot-1) return 0; else return mark[a&b]; } int main() { int i,j,n,m; memset(mark,0,sizeof(mark)); for(i=0;i<1<<12;i++) { mark[i]=fun(i); //printf("mark[%d]=%d\n",i,mark[i]); } while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) return 0; tot=1<