zoukankan      html  css  js  c++  java
  • [hdu2476]String painter(区间dp)

    [hdu2476]String painter(区间dp)

    感觉自己发两篇一样的题解不太好

     CQOI2007 涂色 paint (区间dp)

    没错就是前两天我闲得无聊发的这道题

    只不过初始条件变了...

    这道题初始木棍已经是涂过色的了...

    然后我就又不会了

    (那你为啥还在这儿发题解)

    既然已经有初始颜色了,那么就说明有的地方会是不需要涂的(因为本来就是目标颜色)

    那么相较于上面那道题的修改就在这里了

    1 for(int i=1;i<=n;i++)
    2     {
    3         if(xl1[i]==xl2[i])dp2[i]=dp2[i-1];
    4         else for(int k=0;k<i;k++)dp2[i]=min(dp2[i],dp2[k]+dp[k+1][i]);
    5     }

    我想还是挺好懂的

    事实上本质就是再额外从头到尾dp一次...

    只是如果某一格已经是原来的颜色那么涂完它前面所有格子就等同于多涂了它这一个格子

    然后就又没了

    #include<cstdio>
    #include<cstring>
    int min(int a,int b){return a<b?a:b;}
    char in1[520],in2[520];
    int xl1[520],xl2[520];
    int dp[520][520],dp2[520];
    int main()
    {
    while(scanf("%s%s",in1,in2)!=EOF)
    {
        memset(dp,0x3f,sizeof(dp));
        memset(dp2,0x3f,sizeof(dp2));
        dp2[0]=0;
        memset(xl1,0,sizeof(xl1));
        memset(xl2,0,sizeof(xl2));
    //    scanf("%s",in2);
        int n=strlen(in1);
        for(int i=0;i<=n+1;i++)dp[i][i]=1;
        for(int i=0;i<n;i++)
        {
            xl1[i+1]=in1[i];
            xl2[i+1]=in2[i];
        }
        for(int d=1;d<n;d++)
        {
            for(int i=1;i+d<=n;i++)
            {
                if(xl2[i]==xl2[i+d])dp[i][i+d]=min(dp[i][i+d-1],dp[i+1][i+d]);
                for(int k=i;k<i+d;k++)dp[i][i+d]=min(dp[i][i+d],dp[i][k]+dp[k+1][i+d]);
            }
        }
    //    printf("%d
    ",dp[1][n]);
        for(int i=1;i<=n;i++)
        {
            if(xl1[i]==xl2[i])dp2[i]=dp2[i-1];
            else for(int k=0;k<i;k++)dp2[i]=min(dp2[i],dp2[k]+dp[k+1][i]);
        }
        printf("%d
    ",dp2[n]);
    }
    return 0;
    }
  • 相关阅读:
    NFC
    精品收藏:GitHub人工智能AI开源项目
    typedef的用法,C语言typedef详解
    “此人不存在”
    视频换脸-Deepfakes代码解读和训练说明
    Linux下__attribute__((visibility ("default")))的使用
    piao
    高通开源android源码下载
    iOpenWorskSDK下载和答疑贴
    解构领域驱动设计(三):领域驱动设计
  • 原文地址:https://www.cnblogs.com/rikurika/p/9996164.html
Copyright © 2011-2022 走看看