社区讨论

第一批数据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 条回复,欢迎继续交流。

正在加载回复...