https://www.luogu.com.cn/problem/P3392
这个题归在了枚举里,这个题思路就是枚举三个局域的2个分界线,然后计算出每种情况的值,再求最小值
#include<iostream>
using namespace std;
int sum=99999999,n,m;
int num;
char map[100][100];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>map[i][j];
for(int i=1;i<=n-2;i++)//白色区域最下面一行的位置
{
for(int j=i+1;j<=n-1;j++)//蓝色区域最下一行的位置
{
num=0;
for(int k=1;k<=i;k++)
for(int l=1;l<=m;l++)
if(map[k][l]!='W') num++;//计算区域中需要涂数
for(int k=i+1;k<=j;k++)
for(int l=1;l<=m;l++)
if(map[k][l]!='B') num++;
for(int k=j+1;k<=n;k++)
for(int l=1;l<=m;l++)
if(map[k][l]!='R') num++;
sum=min(sum,num);
}
}
cout<<sum<<endl;
return 0;
}