bzoj 1260涂色 题解

Posted yanxiujie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n", f[1][len]);
    return 0;

 

以上是关于bzoj 1260涂色 题解的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 1260 [CQOI2007]涂色paint(区间DP)

BZOJ 1260--涂色(区间DP)

BZOJ 1260 涂色

bzoj1260: [CQOI2007]涂色paint

BZOJ-1260涂色paint 区间DP

bzoj1260 [CQOI2007]涂色paint