状压基础题。
#include<iostream>
#include<cstdio>
#include<cstring>
#define p 100000000
#define ll long long
using namespace std;
int dp[13][1<<12],mp[13],a[1<<12],ToT,n,m;
int main() {
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
for (int j=1;j<=m;j++) {
int x;scanf("%d",&x);
if (!x) mp[i]+=(1<<(m-j));
}
for (int i=0;i<(1<<m);i++)
if ((i&(i<<1))==0) a[++ToT]=i;
dp[0][1]=1;
for (int i=1;i<=n;i++)
for (int j=1;j<=ToT;j++)
for (int k=1;k<=ToT;k++)
if ((a[j]&a[k])==0&&(a[j]&mp[i])==0&&(a[k]&mp[i-1])==0)
dp[i][j]=(dp[i][j]+dp[i-1][k])%p;
int ans=0;
for (int i=1;i<=ToT;i++)
ans=(ans+dp[n][i])%p;
printf("%d\n",ans);
return 0;
}