洛谷 P3392 涂国旗

原题链接

image

题解

首先用一个二维数组 记录每行中WBR的数量,用来提高查找速度
其次就是用两层for循环 进行区域划分,如下图所示
然后对区域内的所需更改颜色进行统计,这里要注意写好分界点,不然会WA
最后取最小值
image

#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;
}

posted @ 2023-01-17 18:29  Cheng_Mao  阅读(29)  评论(0)    收藏  举报