原题链接
题解
首先用一个二维数组 记录每行中WBR的数量,用来提高查找速度
其次就是用两层for循环
进行区域划分,如下图所示
然后对区域内的所需更改颜色进行统计,这里要注意写好分界点,不然会WA
最后取最小值
#include "bits/stdc++.h"
using namespace std;
int main(){
int n,m,area[51][3]={0},ans=10000,rnt;
char ch;
cin>>n>>m;
//统计一行内的颜色数量
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>ch;
if(ch=='W')area[i][0]++;
else if(ch=='B')area[i][1]++;
else if(ch=='R')area[i][2]++;
}
}
for(int i=1;i<n-1;i++){
for(int j=i;j<n-1;j++){
//上面两层就是用来划分区域
rnt=area[0][1]+area[0][2]+area[n-1][0]+area[n-1][1];
for(int k=1;k<i;k++)rnt+=area[k][1]+area[k][2];
for(int h=i;h<=j;h++)rnt+=area[h][0]+area[h][2];
for(int g=j+1;g<n-1;g++)rnt+=area[g][0]+area[g][1];
ans=min(ans,rnt);
}
}
cout<<ans;
}
标签:国旗,ch,洛谷,area,int,++,P3392
From: https://www.cnblogs.com/ChengMao/p/17058505.html