题目:P3392 涂条纹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
int n,m,w[50],b[50],r[50];
int ans=INT_MAX;
string s;
inline int check(char c){
int tot=0;
for(int i=0;i<m;i++){
if(s[i]!=c) tot++;
}
return tot;
}
signed main(){
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s;
w[i]=w[i-1]+check('W');
b[i]=b[i-1]+check('B');
r[i]=r[i-1]+check('R');
}
for(int i=1;i<n-1;i++){
for(int j=i+1;j<n;j++){
ans=min(ans,w[i]+b[j]-b[i]+r[n]-r[j]);
}
}
cout<<ans;
return 0;
}
从这道题学会的:
- 在求最大,最小的变量时,初始化变量为 : 求最大值:int ans=INT_MIN; 求最小值: int ans=INT_MAX; 如果初始化为0,会报错。
- 枚举和前缀和的灵活应用。