记录编号 590696 评测结果 AAAAAAAAAA
题目名称 [USACO Nov06] 牧场的安排 最终得分 100
用户昵称 Gravatardream 是否通过 通过
代码语言 C++ 运行时间 0.031 s
提交时间 2024-07-10 17:16:37 内存使用 3.40 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int mod=100000000,N=14;
int m,n;
int cnt;
int a[(1<<N)];
int b[N];
int f[N][(1<<N)];
void it(){
	for(int i=0;i<(1<<n);i++){
		if(i&(i<<1)){
			continue;
		}
		a[++cnt]=i;
	}
}
int main(){
	freopen("cowfood.in","r",stdin);
	freopen("cowfood.out","w",stdout);
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=0;j<n;j++){
			int c;
			cin>>c;
			b[i]+=(c<<j);
		}
	}
	it();
	for(int i=1;i<=cnt;i++){
		if((a[i]|b[1])==b[1]){
			f[1][a[i]]=1;
		}
	}
	int res=0;
	for(int i=2;i<=m;i++){
		for(int j=1;j<=cnt;j++){
			if((a[j]|b[i])!=b[i]){
				continue;
			}
			for(int q=1;q<=cnt;q++){
				if((a[q]|b[i-1])!=b[i-1]){
					continue;
				}
				if(a[j]&a[q]){
					continue;
				}
				f[i][a[j]]+=f[i-1][a[q]];
				f[i][a[j]]%=mod;				
			}
		}
	}
	for(int i=1;i<=cnt;i++){
		res+=f[m][a[i]];
		res%=mod;
	}
	cout<<res;
	return 0;
}