#1、#3正确
查看原帖
#1、#3正确
848012
Nightmare486楼主2024/7/25 10:52

想法:先保存要涂满1到n-2行的白色的格子数,然后是蓝色、红色,最后分别遍历白蓝红格子数:i行,j行,n-i-j行,求出最小值

#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>

using namespace std;
char arr[55][55];
int w[55],b[55],r[55],answ=0,ansb=0,ansr=0;
int main(){
	int n,m;
	cin>>n>>m;
	int minn=n*m;
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>arr[i][j];
		}
	}
	
	for(int i=1;i<=n-2;i++){
		for(int j=1;j<=m;j++){
			if(arr[i][j]!='W') answ++;
		}
		w[i]=answ;
		//cout<<w[i]<<endl;
	}
	for(int i=2;i<=n-1;i++){
		for(int j=1;j<=m;j++){
			if(arr[i][j]!='B') ansb++; 
		} 
		b[i-1]=ansb;
		//cout<<b[i-1]<<endl;
	}
	for(int i=3;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(arr[i][j]!='R') ansr++; 
		} 
		r[i-2]=ansr;
		//cout<<r[i-2]<<endl;
		
	}
	for(int i=1;i<=n-2;i++){
		for(int j=1;j<=n-2;j++){
			if(w[i]+b[j]+r[n-i-j]<=minn){
				minn=w[i]+b[j]+r[n-i-j];
				//cout<<i<<" "<<j<<" "<<n-2-i-j<<endl;
			}
		}
	}
	
	cout<<minn<<endl;
	
	
	return 0;
}
2024/7/25 10:52
加载中...