#include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; #define ll long long #define re register const int mod=1e8; void read(int &a) { a=0; int d=1; char ch; while(ch=getchar(),ch>‘9‘||ch<‘0‘) if(ch==‘-‘) d=-1; a=ch^48; while(ch=getchar(),ch>=‘0‘&&ch<=‘9‘) a=(a<<3)+(a<<1)+(ch^48); a*=d; } int cnt,sta[505],f[15][1<<12+1],st[505]; inline bool solve(int x){return x&(x>>1);} int main() { int n,m; read(n); read(m); for(re int i=1;i<=n;i++) for(re int j=1;j<=m;j++) { int x; read(x); if(!x) st[i]|=1<<(m-j); } int h=(1<<m)-1; for(re int i=0;i<=h;i++) { if(solve(i)) continue; sta[++cnt]=i; } for(re int i=1;i<=cnt;i++) { if(st[1]&sta[i]) continue; f[1][i]=1; } for(re int i=2;i<=n;i++) for(re int j=1;j<=cnt;j++) { int last=sta[j]; if(last&st[i-1]) continue; for(re int k=1;k<=cnt;k++) { int now=sta[k]; if(now&st[i]) continue; if(now&last) continue; (f[i][k]+=f[i-1][j])%=mod; } } int ans=0; for(re int i=1;i<=cnt;i++) (ans+=f[n][i])%=mod; printf("%d",ans); return 0; }
原文:https://www.cnblogs.com/acm1ruoji/p/10859795.html