| 比赛 | 2024暑假C班集训A | 评测结果 | AAAAAAAAAA | 
    | 题目名称 | 牧场的安排 | 最终得分 | 100 | 
    | 用户昵称 | 小金 | 运行时间 | 0.000 s | 
    | 代码语言 | C++ | 内存使用 | 0.00 MiB | 
    | 提交时间 | 2024-07-10 11:51:37 | 
显示代码纯文本
#include<iostream>
#include<cstdio>
int n,m,a[15],p[1<<15],s;
long long f[15][(1<<15)];
const long long M=100000000;
void chu()
{
	for(int i=0;i<(1<<m);i++)
	{
		if(i&(i<<1)) continue;
		s++;
		p[s]=i;
	}
}
int main()
{
    freopen("cowfood.in","r",stdin);
    freopen("cowfood.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int j=1;j<=n;j++)
	{
		for(int i=m-1;i>=0;i--)
		{
			int x;
			scanf("%d",&x);
			a[j]+=(x<<i);
		}
	}
	chu();
	for(int i=1;i<=s;i++)   
	{
		if(!((p[i]|a[1])==a[1])) continue;
		f[1][p[i]]=1;
	}
	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=s;j++)
		{
			if(!((p[j]|a[i])==a[i])) continue;  
			for(int k=1;k<=s;k++)
			{
				if(!((p[k]|a[i-1])==a[i-1])) continue;  
				if(p[j]&p[k]) continue;
				f[i][p[j]]=(f[i][p[j]]+f[i-1][p[k]])%M;
			}
		}
	}
	long long ans=0;
	for(int j=1;j<=s;j++)
	{
		ans=(ans+f[n][p[j]])%M;
	}
	printf("%lld",ans);
	return 0;
}