|
- #include <algorithm>
- #include <iostream>
- #include <cmath>
- #include <cstring>
- #include <map>
- #include <string>
- #include <vector>
- #include <queue>
- #include <stack>
- #include <cstdio>
- #include <cstdlib>
- using namespace std;
- int n,m,t,ans=0,dp[20][9000],st[9000],mmap[20],k=0;
- bool check(int x,int zh)
- {
- return (mmap[x]&st[zh]);
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=1;i<=n;i++)
- for(int j=1;j<=m;j++)
- {
- scanf("%d",&t);
- if(t==0)
- mmap[i]+=(1<<(j-1));
- }
- for(int i=0;i<(1<<m);i++)
- {
- if(!(i&(i<<1)))
- st[++k]=i;
- }
- for(int i=1;i<=k;i++)
- {
- if(!check(1,i))
- dp[1][i]=1;
- }
- for(int i=2;i<=n;i++)
- for(int j=1;j<=k;j++)
- if(!check(i,j))
- for(int f=1;f<=k;f++)
- if(!check(i-1,f)&&!(st[j]&st[f]))
- dp[i][j]+=dp[i-1][f];
- for(int i=1;i<=k;i++)
- {
- ans+=dp[n][i];
- ans%=100000000;
- }
- printf("%d",ans);
- return 0;
- }
复制代码 |
|