zoukankan      html  css  js  c++  java
  • 洛谷P4170 [CQOI2007]涂色题解

    废话:

    这个题我第一眼看就是贪心呐, 可能是我之前那做过一道类似的题这俩题都是关于染色的

    现在由于我帅气无比的学长的指导, 我已经豁然开朗, 这题贪心不对啊,

    当时感觉自己好厉害贪心都能想出来

    差点就觉得自己感动中国了

    现在感觉自己仿佛是个zz

    但是50分的话, 还是比较可观的(我在瞎说不要信

    正文:

    区间DP, 枚举区间 ,分为两个情况讨论

    第一种情况:你现在枚举的这个区间[i, j], 两边的颜色是一样的那么就从[i + 1. j]和[i, j - 1]里面选择较小的那一个

    第二种情况:就是两边颜色不一样的情况, 直接枚举一个k合并区间即可

    最后一定要注意:

    f数组一定要初始化!

     memset (f, 0x3f3f3f, sizeof (f));
     for (int i = 1; i <= len; i++)
       f[i][i] = 1;

    AC程序(我真的很喜欢自己的码风,等待挨喷):

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    const int N = 110;
    char ch[N];
    int f[N][N], len;
    int main () {
        scanf ("%s", ch + 1);
        len = strlen (ch + 1);
        memset (f, 0x3f3f3f, sizeof (f));
        for (int i = 1; i <= len; i++)
            f[i][i] = 1;
        for (int l = 2; l <= len; l++) 
            for (int i = 1; i + l - 1 <= len ; i++) {
                int j = i + l - 1;
                if (ch[i] == ch[j])
                    f[i][j] = min (f[i + 1][j], f[i][j - 1]);
                else for (int k = i; k < j; k++) 
                    f[i][j] = min (f[i][j], f[i][k] + f[k + 1][j]);
            }
        printf ("%d
    ", f[1][len]);
        return 0;
    }

    谢谢收看, 祝身体健康!

  • 相关阅读:
    css自动添加浏览器兼容前缀 autoprefixer设置
    QT调用百度语音REST API实现语音合成
    stm32之SPI通信协议
    Framingham风险评估
    ACF/PACF,残差白噪声的检验问题
    详细BP神经网络预测算法及实现过程实例
    R语言 神经网络算法
    matlab绿色版本合集
    时间序列学习记录
    预测出现代码问题及解决方法
  • 原文地址:https://www.cnblogs.com/yanxiujie/p/11345671.html
Copyright © 2011-2022 走看看