社区讨论
求调
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 条回复,欢迎继续交流。
正在加载回复...