• bzoj 1260涂色 题解


    题面

    区间dp, 我学的也不怎么好。

    myj说动态规划就是搜索的无限剪枝。

    所以是搜了网上的代码, 看了看。

    思路就是枚举区间,f数组就是存储从i到j需要的最少次数, 当然一开始他们的值要先设置一个很大的值, 单独的区间也就是他自己这个点赋初值为1, 表示涂好这个只需要一次。

    如果这两个区间的边界是一样的颜色直接用i + 1到j和i到j - 1这两个位置更新, 如果这两个区间的边界的颜色并不一样, 那就分成两段枚举k, 然后合并区间。

    动规的代码一般不会太冗杂(我理解的是这样), 仔细想想其实也是能明白的, 主要是要多做题

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define N 60
    using namespace std;
    char ch[N];
    int f[N][N];
    int main () {
        scanf ("%s", ch + 1);
        int len = strlen (ch + 1);
        memset (f, 0x3f3f, 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;
    }
  • 相关阅读:
    Linux下 printf 输出字符串的颜色
    ARM指令集详解(超详细!带实例!)
    试试代码框
    java web各种listener
    mysql 技术支持
    Tomcat 技术支持
    关于PreparedStatement.addBatch()方法
    JQuery banner 轮播
    Extjs 提示窗口
    如何删除JSP编译后的空行
  • 原文地址:https://www.cnblogs.com/yanxiujie/p/11212369.html
Copyright © 2020-2023  润新知