记录编号 |
590696 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[USACO Nov06] 牧场的安排 |
最终得分 |
100 |
用户昵称 |
dream |
是否通过 |
通过 |
代码语言 |
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;
}