zoukankan      html  css  js  c++  java
  • codeforces 1132 F Clear the String

    题意:
    给你一个只含小写字母的字符串,每次只能删除一段含有一样字母区间,问最少删多少次,能删除整个字符串
    分析:
    状态:dp[i][j]代表区间i,j完全删除需要多少步
    转移:当存在i<=k<j,使得str[k]=str[j],那么我们可以将str[k+1~j]删除至
    只剩下str[j]一种字母的字串,然后和str[k]合并,省去一步的时间。
    例如babaca
    当i=1,j=6,k=4时
    将str[5~6] ca删至a,然后与baba合并,显然dp[5][6]中删除a的那一步就可以省去,所以k=4时,转移方程为:
    dp[1][6]=min(dp[1][6],d

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define maxn 510
    int dp[maxn][maxn];
    char str[maxn];
    int main()
    {
        //ios::sync_with_stdio(false);
        int n;scanf("%d",&n);
        scanf("%s", str+1);
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            dp[i][i]=1;
        }
        for(int L=2;L<=n;L++)
        {
            for(int i=1;i+L-1<=n;i++)
            {
                int j=i+L-1;
                dp[i][j]=n;
                for(int k=i;k<j;k++)
                {
                    if(str[k]==str[j])
                    {
                        dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]-1);
                    }
                    else
                    {
                        dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
                    }
                }
            }
        }
        printf("%d
    ",dp[1][n]);
        return 0;
    }

    p[1][4]+dp[5][6]-1);

  • 相关阅读:
    yarn-cli 缓存
    html DOM 的继承关系
    JavaScript basics: 2 ways to get child elements with JavaScript
    svn merge 的区别
    virtualbox 设置windows 于ubuntu虚拟机共享文件夹
    angular 学习理解笔记
    e.which
    痛定思痛
    【转】反思 成长
    日语学习词汇量
  • 原文地址:https://www.cnblogs.com/cleanerhgf/p/10494799.html
Copyright © 2011-2022 走看看