zoukankan      html  css  js  c++  java
  • 51nod 1154【DP】

    区间DP大暴力吧?GG.

    dp[ i ] 为字符至 i 的最少数量。

    如果[Left , Right]是回文串,

    dp[Right] = min(dp[ Right ] , dp[Left-1] + 1);

    #include<bits/stdc++.h>
    using namespace std;
    
    const int N=5e3+10;
    
    int dp[N];
    char a[N];
    int n;
    
    int main(){
        scanf("%s",a+1);n=strlen(a+1);
    
        for(int i=0;i<=n;i++)
            dp[i]=i;
    
        for(int i=1;i<=n;i++)
        {
            int Left,Right;
            //aba
            Left=Right=i;
            while(Left>=1&&Right<=n&&a[Left]==a[Right])
            {
                dp[Right]=min(dp[Right],dp[Left-1]+1);
                Right++;
                Left--;
            }
            //abba
            Left=i;Right=i+1;
            while(Left>=1&&Right<=n&&a[Left]==a[Right])
            {
                dp[Right]=min(dp[Right],dp[Left-1]+1);
                Right++;
                Left--;
            }
           // printf("%d
    ",dp[i]);
        }
        printf("%d
    ",dp[n]);
        return 0;
    }
    
    


  • 相关阅读:
    二分 || UOJ 148 跳石头
    等边n边型
    激光样式
    n个数中选k个数和为sum
    引爆炸弹
    光盘行动
    (二分)分蛋糕问题
    总结
    个人测试
    第三次团队作业
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777342.html
Copyright © 2011-2022 走看看