社区讨论

求调

P2704[NOI2001] 炮兵阵地参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhjtjsd3
此快照首次捕获于
2025/11/04 08:16
4 个月前
此快照最后确认于
2025/11/04 08:16
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
int h[105];
ll dp[105][1065][1065];

int count(int x){
	int cnt = 0;
	while(x){
		cnt += (x & 1);
		x >>= 1;
	}
	return cnt;
}

signed main(){
	ios:: sync_with_stdio(false);
	vector<int> path;
	int n,m;
	cin>>n>>m;
	for(int i = 0; i < (1 << m); ++i){
		if(i & (i << 1))  continue ;
		if(i & (i << 2))  continue ;
		path.push_back(i);
	}
	for(int i = 1; i <= n; i++){
		for(int j = 0; j < m; j++){
			char ch;
			cin>>ch;
			if(ch == 'H')  h[i] |= 1;
			h[i] <<= 1;
		}
	}
	ll ans = 0;
	for(int i = 1; i <= n; i++){
		for(int j = 0; j < path.size(); j++){
			if(path[j] & h[i])  continue ;
			for(int k = 0; k < path.size(); k++){
				if(path[k] & path[j])  continue ;
				for(int l = 0; l < path.size(); l++){
					if(path[l] & path[j])  continue ;
					dp[i][j][k] = max(dp[i][j][k],dp[i-1][k][l] + count(path[j]));
					ans = max(ans,dp[i][j][k]);
				}
			}
		}
	}
	cout<<ans<<'\n';
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...