zoukankan      html  css  js  c++  java
  • eduCF#61 F. Clear the String /// 区间DP 消除连续一段相同字符 全部消完的最少次数

    题目大意:

    给定字符串 每次消除可消除连续的一段相同的字符的子串

    求消除整个字符串的最少消除次数

    #include <bits/stdc++.h>
    using namespace std;
    #define LL long long
    #define INF 0x3f3f3f3f
    #define mem(i,j) memset(i,j,sizeof(i))
    #define inc(i,l,r) for(int i=l;i<=r;i++)
    #define dec(i,r,l) for(int i=r;i>=l;i--)
    const int N=500+5;
    
    int n, dp[N][N];
    char s[N];
    
    int main()
    {
        while(~scanf("%d%s",&n,s)) {
            inc(i,0,n-1) dp[i][i]=1;
            inc(i,0,n-1) inc(j,0,i-1) {
                dp[j][i]=INF;
                inc(k,j,i-1) {
                    // 如 “abaca”
                    int t=dp[j][k]+dp[k+1][i-1];
                    //     “aba”  +  “c” 
                    if(s[k]!=s[i]) t++;
                    // 此时s[k]='a'=s[i] 故先消“c”使得“aba”并上s[i]
                    // 那么s[i]就不需要重新再消一次 
                    dp[j][i]=min(t,dp[j][i]);
                }
            }
            printf("%d
    ",dp[0][n-1]);
        }
    
        return 0;
    }
  • 相关阅读:
    Codeforces Round #171 (Div. 2)
    ACdream 1079 郭式树
    HDOJ 1517 博弈论
    ACdream 1080 面面数
    博弈论 Nim 博弈
    Codeforces Round #172 (Div. 2)
    ACdream 1084 同心树
    STL bitset
    博弈论 bash博弈
    POJ 3261 后缀数组
  • 原文地址:https://www.cnblogs.com/zquzjx/p/10482912.html
Copyright © 2011-2022 走看看