trailfight @ 2024-10-11 19:28:49
#include<bits/stdc++.h>
using namespace std;
const int N=105, M=60;
int n, m, a[N], status[N][M], len[N], cnt[M], dp[N][M][M], ans;
char ch[M];
void dfs(int h, int s, int l, int num){
cnt[s]=num;
if(l>=m) return;
if(a[h]&(1<<l)){
status[h][++len[h]]=s|1<<l;
dfs(h, s|1<<l, l+3, num+1);
}
dfs(h, s, l+1, num);
}
int main(){
scanf("%d%d", &n, &m);
for(int i=0; i<n; ++i){
scanf("%s", &ch);
for(int j=0; j<m; ++j){
if(ch[j]=='P') a[i]=a[i]|1<<j;
}
}
for(int i=0; i<n; ++i){
dfs(i, 0, 0, 0);
}
for(int i=0; i<=len[0]; ++i){
dp[0][i][0]=cnt[status[0][i]];
ans=max(ans, dp[0][i][0]);
}
for(int i=1; i<n; ++i){
for(int j=0; j<=len[i]; ++j){
for(int k=0; k<=len[i-1]; ++k){
if(status[i][j]&status[i-1][k]) continue;
if(i<2){
dp[i][j][k]=max(dp[i][j][k], dp[i-1][k][0]+cnt[status[i][j]]);
ans=max(ans, dp[i][j][k]);
}else{
for(int l=0; l<=len[i-2]; ++l){
if(status[i][j]&status[i-2][l] || status[i-1][k]&status[i-2][l]) continue;
dp[i][j][k]=max(dp[i][j][k], dp[i-1][k][l]+cnt[status[i][j]]);
ans=max(ans, dp[i][j][k]);
}
}
}
}
}
printf("%d\n", ans);
return 0;
}
by cxgcspyinlangyun @ 2024-10-11 19:30:57
???
by brbrbread @ 2024-10-11 19:32:09
O2优化有可能会改变代码的结构和执行顺序,这可能会影响程序的正确性,特别是在复杂的逻辑处理中。 在某些情况下,O2优化可能会增加空间复杂度,导致内存使用量增加,从而可能引发MLE问题
by xyf007 @ 2024-10-11 19:44:19
@brbrbread 至少在 OI 范围内,O2 优化不会让一个正确的代码出错。AI 收收味。