题目: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,会报错。
- 枚举和前缀和的灵活应用。