且歌且行,眉目轻盈。何妨吟啸且徐行。|

胖柚の工作室

园龄:2年1个月粉丝:2关注:15

2024-04-03 13:53阅读: 104评论: 0推荐: 0

P3392 涂条纹

题目链接:

第一反应是枚举白色和蓝色、以及蓝色和红色的边界。输入字符数组的同时,预处理出将每一行涂为白色、蓝色、红色所需要的块数。w[i],B[i],R[i] 分别表示将第 i 行涂成白色、蓝色、红色所需的块数。

然后对 w[i],B[i],R[i] 分别求一遍前缀和,白色部分就是 1i,蓝色部分就是 i+1j,剩下的 j+1n 就是红色部分。需要注意每种颜色至少占据一行。

image

#include <bits/stdc++.h>
const int N = 60;
char a[N][N];
int w[N], B[N], R[N];
int n, m, ans = 0x3f3f3f3f;
int main()
{
std::cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
std::cin >> a[i][j];
if (a[i][j] != 'W') w[i]++;
if (a[i][j] != 'B') B[i]++;
if (a[i][j] != 'R') R[i]++;
}
}
for (int i = 1; i <= n; i++) {
w[i] += w[i - 1];
B[i] += B[i - 1];
R[i] += R[i - 1];
}
for (int i = 1; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
ans = std::min(ans, w[i] + B[j] - B[i] + R[n] - R[j]);
}
}
std::cout << ans;
return 0;
}

本文作者:胖柚の工作室

本文链接:https://www.cnblogs.com/pangyou3s/p/18112538

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   胖柚の工作室  阅读(104)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起