神秘的边界问题。。。
改好了此贴就当作警士后人了。。。
4.in:
1 1
0
4.out:
1
4.代码输出:
2
#include<bits/stdc++.h>
using namespace std;
int a[14];//第 i 行的初始状态
int f[14][5000];
int n,m;
int num[5000],idx;//可用状态
int cnt[5000];//状态 i 的 1 的个数
bool check(int x){return x&(x<<1);}
void init(){
for(int i=0;i<(1<<m);i++) if(!check(i)) num[++idx]=i;
for(int i=1,x;i<=idx;x=num[++i]) while(x) x=x&(x-1),cnt[i]++;
for(int i=1;i<=idx;i++) f[1][num[i]]=1;
}
int main(){
cin>>n>>m;
init();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x;
cin>>x;
a[i]+=(((x)?0:1)<<(m-j));
}
}
int mod=pow(10,8);
for(int i=1;i<=n;i++){
for(int j=1;j<=idx;j++){
if(a[i]&num[j]) continue;
for(int k=1;k<=idx;k++){
if(num[j]&num[k] or a[i-1]&num[k]) continue;
f[i][num[j]]+=(f[i-1][num[k]]);
f[i][num[j]]%=mod;
// cout<<i<<" "<<num[j]<<" "<<f[i][cnt[j]]<<endl;
}
}
}
int sum=0;
for(int i=0;i<(1<<m);i++){
sum=(sum+f[n][i])%mod;
}
cout<<sum%mod;
return 0;
}