[題解](狀壓/水)luogu_P1879玉米田
Posted superminivan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[題解](狀壓/水)luogu_P1879玉米田相关的知识,希望对你有一定的参考价值。
大水題然而因為智障的錯誤调了半天......
n,m别反着输入啊......內外循環和狀態數都不等價
别的就是記錄一下每一行不可行的點,也狀壓一下,dp的時候判一下即可
#include<bits/stdc++.h> using namespace std; const int mod=100000000; int n,m,tot; int f[15][1<<12+1],c[1<<12+1]; int can[15]; int main() { scanf("%d%d",&m,&n); for(int i=1,a;i<=m;i++) for(int j=1;j<=n;j++){ scanf("%d",&a); if(a==0)can[i]=can[i]|(1<<(n-j)); } for(int i=0;i<=(1<<n)-1;i++) if(!(i&(i<<1)) && !(i&(i>>1)))c[++tot]=i; int last,now; for(int i=1;i<=tot;i++){//處理第一行 if(c[i] & can[1])continue; f[1][c[i]]=1; } for(int i=2;i<=m;i++) for(int j=1;j<=tot;j++){ last=c[j];if(last & can[i-1])continue; for(int k=1;k<=tot;k++){ now=c[k]; if(now & can[i])continue; if(now & last)continue; f[i][now]+=f[i-1][last]; f[i][now]%=mod; } } int ans=0; for(int i=0;i<=(1<<n)-1;i++){ ans+=f[m][i];ans%=mod; } printf("%d",(ans+mod)%mod); // for(int i=1;i<=tot;i++)cout<<c[i]<<‘ ‘; }
以上是关于[題解](狀壓/水)luogu_P1879玉米田的主要内容,如果未能解决你的问题,请参考以下文章