哪里出问题了?
查看原帖
哪里出问题了?
873417
Istruggle楼主2023/12/15 20:30

我觉得没什么问题呀?

#include<iostream>
using namespace std;
int n,m;
int dp[105][1205][1205],g[105],s[1205],num[1205];
int cnt=0;
int main()
{
	scanf("%d%d",&n,&m);
	for(int i = 1;i<=n;i++){
		for(int j = 0;j<m;j++){
			char ch; cin>>ch;
			if(ch=='P') g[i]+=(1<<(m-j-1));
		}
	}
//	for(int i = 1;i<=n;i++) cout<<g[i]<<" "; cout<<endl;
	for(int i = 0;i<(1<<m);i++){
		if(!(i&i>>1)&&!(i&i>>2)) s[cnt++]=i;
		int x = i;
		while(x){
			if(x&1) num[i]++;
			x=x>>1;
		}
	}
//	for(int i = 0;i<(1<<m);i++) cout<<num[i]<<" "; cout<<endl;
//	for(int i = 0;i<cnt;i++)  cout<<s[i]<<" ";  cout<<endl;
    for(int i = 3;i<=n;i++){
    	for(int j = 0;j<cnt;j++){
    		for(int a = 0;a<cnt;a++){
    			for(int b = 0;b<cnt;b++){
    				if(!(s[j]&s[a])&&!(s[j]&s[b])&&!(s[a]&s[b])&&g[i]&s[j]==s[j])
					dp[i][j][a]=max(dp[i][j][a],dp[i-1][a][b]+num[s[j]]);
				}
			}
		}
	}
	int ans=0;
	for(int i = 0;i<cnt;i++)
	for(int j = 0;j<cnt;j++)
	ans=max(ans,dp[n][i][j]); 
	printf("%d",ans);
}
2023/12/15 20:30
加载中...