社区讨论
第一批数据AC,第二批全WA求调教!
P1879[USACO06NOV] Corn Fields G参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo1vu544
- 此快照首次捕获于
- 2023/10/23 03:49 2 年前
- 此快照最后确认于
- 2023/11/03 04:18 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const int P=1e9;
int g[14];//各行的状态值
int s[1<<14];//一行的合法状态集
int cnt;//同一行的合法状态个数
int f[14][1<<14];
//f[i,a]表示已经种植前i行,第i行第a个状态时的方案数
int main(){
int n,m;//行数列数
cin >> n >> m;//矩阵的长宽
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int x;
cin >> x;
g[i]=(g[i]<<1)+x;//各行的状态值状态压缩 110->6 010->2
}
}
for(int i=0;i<(1<<m);i++){//枚举一行所有状态
if(!(i&i>>1)){//如果不存在相邻的1
s[cnt++]=i;//保存一行的合法状态
}
}
f[0][0]=1;
for(int i=1;i<=n+1;i++){//枚举行
for(int a=0;a<cnt;a++){//枚举第i行合法状态
for(int b=0;b<cnt;b++){//枚举第i-1行合法状态
if(!(s[a]&s[b])&&(s[a]&g[i])==s[a]){//前:不能同列均为1 后:种在肥沃土地上
f[i][a]=(f[i][a]+f[i-1][b])%P;
}
}
}
}
cout << f[n+1][0];
return 0;
}
求救大神!
回复
共 5 条回复,欢迎继续交流。
正在加载回复...