第一批数据AC,第二批全WA求调教!
查看原帖
第一批数据AC,第二批全WA求调教!
967856
PeaceSunset楼主2023/8/12 12:33
#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;
}

求救大神!

2023/8/12 12:33
加载中...