#include<cstdio>
#include<cstring>
#include<iostream>
#define mod 100000000
using namespace std;
int M,N,top=0;
int state[600],num[110];
int dp[20][600];
int cur[20];
inline bool ok(int x){
if(x&x<<1) return false;
return true;
}
inline bool fit(int x,int k){
if(x&cur[k])return false;
return true;
}
void init(){
memset(dp,0,sizeof(dp));
top=0;
int sum=1<<N;
for(int i=0;i<sum;i++)
if(ok(i))state[++top]=i;
}
int main()
{
while(scanf("%d%d",&M,&N)!=EOF)
{
init();
for(int i=1;i<=M;i++)
{
cur[i]=0;
for(int k=1;k<=N;k++)
{
int temp;
scanf("%d",&temp);
if(temp==0)
cur[i]+=(1<<(N-k));
}
}
for(int i=1;i<=top;i++)
if(fit(state[i],1))
dp[1][i]=1;
for(int i=2;i<=M;i++)
for(int k=1;k<=top;k++)
if(fit(state[k],i))
for(int j=1;j<=top;j++)
if(fit(state[j],i-1)&&(state[j]&state[k])==0)
dp[i][k]=(dp[i][k]+dp[i-1][j])%mod;
int ans=0;
for(int i=1;i<=top;i++)
ans=(dp[M][i]+ans)%mod;
cout<<ans<<endl;
}
}
Corn Fields POJ - 3254
最新推荐文章于 2020-08-15 17:41:03 发布