327玉米田
https://www.acwing.com/problem/content/329/
我这水平也就只能做做简单题
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=13,M=1<<N;
const int mod=1e8;
int a[N];
int dp[N][M];
vector<int> vaild[N];
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{ a[i]<<=1; int temp;cin>>temp; a[i]+=temp;}
for(int i=0;i<n;i++)
{
for(int j=0;j<1<<m;j++)
{
bool is_vaild=true,cnt=true;
for(int k=0;k<m;k++)
{
if(((a[i]>>k)&1)==0&&((j>>k)&1)) {is_vaild=false;break;}
if((j>>k)&1)
{
if(cnt==false) {is_vaild=false;break;}
else cnt=false;
}
else
cnt=true;
}
if(is_vaild) vaild[i].push_back(j);
}
}
for(auto i:vaild[0])
dp[0][i]=1;
for(int i=1;i<n;i++)
for(auto j:vaild[i])
for(auto k:vaild[i-1])
if((j&k)==0)
dp[i][j]+=dp[i-1][k];
int res=0;
for(auto i:dp[n-1])
res+=i;
cout<<res%mod<<endl;
return 0;
}