首页 > 其他分享 >洛谷题单指南-暴力枚举-P3392 涂国旗

洛谷题单指南-暴力枚举-P3392 涂国旗

时间:2024-02-01 09:58:42浏览次数:31  
标签:白色 int 洛谷题 蓝色 枚举 P3392 行数

原题链接:https://www.luogu.com.cn/problem/P3392

题意解读:此题枚举白、蓝、红所有可能的行数组合,依次逐行判断每个方格,是否需要染色,计算最少的染色次数即可。

解题思路:

总行数是n,

先考虑白色,第一行必是白色,最后一行必是红色,至少有一行蓝色,因此白色行数的范围是1 ~ n - 2

再考虑蓝色,前面白色行数为i,至少有一行红色,因此蓝色行数的范围是n - i - 1

最后考虑红色,白色行数为i,蓝色行数为j,那么红色行数可以直接计算n - i - j

枚举每种白、蓝、红的组合即可。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 55;

char a[N][N];
int n, m;
int ans = 2e9;

int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++)
            cin >> a[i][j];
    
    //白:1~n-2,蓝:1~n-白-1,红:n-白-蓝
    for(int i = 1; i <= n - 2; i++)
    {
        for(int j = 1; j <= n - i - 1; j++)
        {
            int k = n - i - j; //红色行数
            int cnt = 0;
            
            int x = 1;
            for(; x <= i; x++)
                for(int y = 1; y <= m; y++)
                    if(a[x][y] != 'W') cnt++; //涂为白色

            for(; x <= i + j; x++)
                for(int y = 1; y <= m; y++)
                    if(a[x][y] != 'B') cnt++; //涂为蓝色

            for(; x <= n; x++)
                for(int y = 1; y <= m; y++)
                    if(a[x][y] != 'R') cnt++; //涂为红色

            ans = min(ans, cnt);
        }
    }

    cout << ans;

    return 0;
}

 

标签:白色,int,洛谷题,蓝色,枚举,P3392,行数
From: https://www.cnblogs.com/jcwy/p/18000604

相关文章

  • 【算法】枚举
    枚举枚举的思想是不断地猜测,从可能的集合中一一尝试,然后再判断题目的条件是否成立。但是并非所有的情况都要枚举,有时要适当的进行一些剪枝。(如枚举\(a+b=c\)且\(b>a\)的个数那么\(b\)要从\(a+1\)开始枚举)。通常来说,我们可以限定枚举的范围让它的复杂度更高。虽......
  • 洛谷题单指南-暴力枚举-P1088 [NOIP2004 普及组] 火星人
    原题链接:https://www.luogu.com.cn/problem/P1088题意解读:火星人的手指可以通过全排列来表示数字,全排列由小到大的顺序即为表示的数字大小,题目可以转化为:给定按顺序全排列中的某一个排列,求往后数m个排列的内容。解题思路:此题与经典全排列问题的差异在于,需要从指定一个排列开......
  • 洛谷题单指南-暴力枚举-P1706 全排列问题
    原题链接:https://www.luogu.com.cn/problem/P1706题意解读:n个数全排列问题,本质上,给定n个空位,枚举每个能填入空位的数,依次填入,每个数只能填一次。解题思路:如何填入n个数呢,可以借助于递归,流程如下:dfs(填入第k个数){如果已经填满n个数输出结果返回......
  • 洛谷题单指南-暴力枚举-P1157 组合的输出
    原题链接:https://www.luogu.com.cn/problem/P1157题意解读:在1~n的数中挑选r个,有多少种组合,与P1036类似,有两种做法:二进制法、DFS,下面给出DFS版的代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=25;intn,r;intt[N];voiddfs(intk){......
  • 洛谷题单指南-暴力枚举-P1036 [NOIP2002 普及组] 选数
    原题链接:https://www.luogu.com.cn/problem/P1036题意解读:题目即要在n个数中,枚举出所有的子集,当子集中数字个数刚好为k时,求和,判断是否是素数。解题思路:方法一:二进制法通过二进制法,可以枚举一个集合中所有元素“选”或者“不选”的情况,用二进制1表示选该元素,二进制0表示不选。......
  • 洛谷题单指南-暴力枚举-P1618 三连击(升级版)
    原题链接:https://www.luogu.com.cn/problem/P1618题意解读:枚举所有三位数的组合情况,判断是否符合比例。解题思路:方法一:枚举第一个数根据题意,目的是寻找三个符合比例的三位数,可以直接枚举第一个,最小是123,最大是987设第一个数为x,三个数的比例关系是a:b:c设另外两个数为y,z那么,根......
  • 洛谷题单指南-暴力枚举-P2241 统计方形(数据加强版)
    原题链接:https://www.luogu.com.cn/problem/P2241题意解读:要在整个n*m区域计算正方形和长方形的个数,枚举法即可。解题思路:此题枚举的对象是矩形的高i和宽j,高的范围[1,n],宽的范围[1,m],然后计算在n*m区域内有多少个i*j,i==j即属于正方形,i!=j属于长方形。那么,问题就集中在了......
  • 洛谷题单指南-排序-P1012 [NOIP1998 提高组] 拼数
    原题链接:https://www.luogu.com.cn/problem/P1012题意解读:通过某种合理的排序方式,使得排序后的数字连在一起最大。解题思路:此题关键在于排序,对于两个数字,哪个数字应该排在前面呢?1、思考误区很容易想到,给定两个数abcd、xyz,先比较第一位a和x,谁大谁排前面,一直到c和z。再来看d,这......
  • 洛谷题单指南-排序-P1104 生日
    原题链接:https://www.luogu.com.cn/problem/P1104题意解读:将学生按照年龄由大到小排序,如果年龄相同,后输入的排在前面,输出排序后的学生姓名。解题思路:此题是一个排序常规题,年龄大排在前说明年、月、日越小越在前面,核心的排序思路如下:1、如果年份不同,按年份由小到大排序2、如果......
  • 洛谷题单指南-排序-P5143 攀爬者
    原题链接:https://www.luogu.com.cn/problem/P5143题意解读:给出一系列的点,按某种顺序经过所有点,计算距离。解题思路:如果小学生,可能对于三维坐标距离有些陌生,没关系,题目已经给出了计算公式,直接套公式即可,关键步骤如下:1、读取所有坐标点2、按高度值从小到大排序3、从头依次计算......