zoukankan      html  css  js  c++  java
  • bzoj1260[CQOI2007]涂色paint(区间dp)

    1260: [CQOI2007]涂色paint

    Time Limit: 30 Sec  Memory Limit: 64 MB
    Submit: 1520  Solved: 924
    [Submit][Status][Discuss]

    Description

    假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。

    Input

    输入仅一行,包含一个长度为n的字符串,即涂色目标。字符串中的每个字符都是一个大写字母,不同的字母代表不同颜色,相同的字母代表相同颜色。

    Output

    仅一行,包含一个数,即最少的涂色次数。

    Sample Input

     

    Sample Output

    【样例输入1】
    AAAAA

    【样例输入1】
    RGBGR

    【样例输出1】
    1

    【样例输出1】
    3


    HINT

    40%的数据满足:1<=n<=10
    100%的数据满足:1<=n<=50

    /*
    区间dp 类似石子归并有木有
    f[i][j] 将1~n染色的最小步数
    从小区间穷举区间后,分情况讨论
    如果区间两端相等,就取[i+1,j],[i,j-1],[i+1,j-1]+1中的最小值;
    如果不一样,就穷举中间断点k,取min([i,k][k+1,j])。 
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    
    #define N 51
    
    using namespace std;
    int f[N][N],n,m,cnt;
    char s[N];
    
    int main()
    {
        memset(f,127/3,sizeof f);
        scanf("%s",s);n=strlen(s);
        for(int i=n;i>=1;i--) s[i]=s[i-1];
        for(int i=1;i<=n;i++) f[i][i]=1;
        for(int i=n-1;i>=1;i--)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(s[i]==s[j]) 
                {
                    f[i][j]=min(f[i+1][j],f[i][j-1]);
                    if(i<j-1)f[i][j]=min(f[i][j],f[i+1][j-1]+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][n]);
        return 0;
    }
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    保证测试通过的ip正则,antdIP/IP段的校验方法,antd的textArea中可以输入多个以换行分隔的ip/IP段,并自动检测出错行的原因
    TP5接口出错只能返回500
    UDP服务只能本机访问问题
    有出现了找半天的小BUG
    PHP本地安装redis扩展
    MYSQL数据库和es数据库同步
    QQ互联应用申请失败
    axios跨域问题解决
    elastic和kibana安装心得
    自增运算符理解
  • 原文地址:https://www.cnblogs.com/L-Memory/p/7512060.html
Copyright © 2011-2022 走看看