zoukankan      html  css  js  c++  java
  • 洛谷-P3392 涂国旗

    洛谷-P3392 涂国旗

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


    题目描述

    某国法律规定,只要一个由 (N imes M) 个小方块组成的旗帜符合如下规则,就是合法的国旗。(毛熊:阿嚏——)

    • 从最上方若干行(至少一行)的格子全部是白色的;
    • 接下来若干行(至少一行)的格子全部是蓝色的;
    • 剩下的行(至少一行)全部是红色的;

    现有一个棋盘状的布,分成了 (N)(M) 列的格子,每个格子是白色蓝色红色之一,小 a 希望把这个布改成该国国旗,方法是在一些格子上涂颜料,盖住之前的颜色。

    小a很懒,希望涂最少的格子,使这块布成为一个合法的国旗。

    输入格式

    第一行是两个整数 (N,M)

    接下来 (N) 行是一个矩阵,矩阵的每一个小方块是W(白),B(蓝),R(红)中的一个。

    输出格式

    一个整数,表示至少需要涂多少块。

    输入输出样例

    输入 #1

    4 5
    WRWRW
    BWRWB
    WRWRW
    RWBWR
    

    输出 #1

    11
    

    说明/提示

    样例解释

    目标状态是:

    WWWWW
    BBBBB
    RRRRR
    RRRRR
    

    一共需要改 (11) 个格子。

    数据范围

    对于 (100\%) 的数据,(N,M leq 50)

    C++代码

    #include <iostream>
    using namespace std;
    
    int n, m, w[50], b[50], r[50];
    
    int main() {
        char c;
        int tmp, ans=2500;
        cin >> n >> m;
        for (int i=0; i<n; ++i)
            for (int j=0; j<m; ++j) {
                cin >> c;
                if (c == 'W')
                    ++w[i];
                else if (c == 'B')
                    ++b[i];
                else
                    ++r[i];
            }
        for (int i=1; i<n-1; ++i)
            for (int j=i+1; j<n; ++j) {
                tmp = 0;
                for (int k=0; k<i; ++k)
                    tmp += b[k] + r[k];
                for (int k=i; k<j; ++k)
                    tmp += w[k] + r[k];
                for (int k=j; k<n; ++k)
                    tmp += w[k] + b[k];
                ans = min(ans, tmp);
            }
        cout << ans << endl;
        return 0;
    }
    
  • 相关阅读:
    css知识点
    javascript 中闭包
    javascript 继承方法总结
    css滚动滚轮事件
    关于闭包的总结
    xpth xslt
    好的js函数
    自动化测试实施(4)
    自动化测试实施(5)
    自动化测试实施(3)
  • 原文地址:https://www.cnblogs.com/yuzec/p/13807382.html
Copyright © 2011-2022 走看看