求助
查看原帖
求助
759098
tangzirui1016楼主2025/1/10 20:49
#include<bits/stdc++.h>
using namespace std;
int n,m,x[105],s[1<<10],num[1<<10],cnt,dp[2][1<<10][1<<10];
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=0;j<m;j++){
			char a;
			cin>>a;
			if(a=='H') x[i]+=1<<(m-j-1); 
		}
	}
	for(int i=0;i<1<<m;i++){
		if(!(i&i>>1)&&!(i&i>>2)){
			s[++cnt]=i;
			for(int j=0; j<m; j++)
      			num[i]+=(i>>j&1);    
		} 
	}
	for(int i=1;i<=n+2;i++){
		for(int a=1;a<=cnt;a++){
			for(int b=1;b<=cnt;b++){
				for(int c=1;c<=cnt;c++){
					if((s[a]&x[i])==s[a]&&(s[b]&x[i-1])==s[b]&&!(s[a]&s[b])&&!(s[b]&s[c])&&!(s[a]&s[c]))
					dp[i&1][a][b]=max(dp[i&1][a][b],dp[i-1&1][b][c]+num[s[a]]);
				}
			}
		}
	}
	cout<<dp[n+2&1][0][0];
	return 0;
}

不知道为什么总是输出0?

2025/1/10 20:49
加载中...