题解 | [CQOI2007]涂色PAINT

[CQOI2007]涂色PAINT

https://www.nowcoder.com/practice/512619bee5874e85bd2812a0c9066125


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String line = sc.nextLine();
        char[] chars = line.toCharArray();
        run(chars);
    }

    public static void run(char[] s) {
        int n = s.length;
        int[][] dp = new int[n + 1][n + 1];
        // 将所有相同位置为1
        for (int i = 0; i < n; i ++) {
            dp[i][i] = 1;
        }
        // 这是一个把涂色过程“逆向”过来的区间DP问题
        // 开始根据距离大小遍历。确定 右边界 = 左边界 + 距离
        for (int i = 1; i < n; i ++) {
            // 左边界值
            for (int j = 0; j + i < n; j ++) {
                int l = j, r = j + i;

                if (s[l] == s[r]) {
                    // 如果左右边界相等,选左或右边界作为目标颜色
                    // 比如GBG中选择GB(选左)或者BG(选右),然后都能涂色为GG,这样就能得到一个GGG。所以本质上选左和选右都可以
                    dp[l][r] = dp[l + 1][r];//选右
                } else {
                    // 如果不相等,则从中间遍历
                    for (int k = l; k <= r; k ++) {
                        // 如果为 dp[l][r] != 0,说明已经计算过,取最小值
                        if (dp[l][r] != 0) {
                            dp[l][r] = Math.min(dp[l][r], dp[l][k] + dp[k + 1][r]);
                        } else {
                            dp[l][r] = dp[l][k] + dp[k + 1][r];
                        }


                    }
                }
            }
        }
        System.out.println(dp[0][n - 1]);
    }


}


全部评论

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务