2018NJUPT第三场排位赛 松松的字符串(dp)

这里写图片描述

#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdlib.h>
#include<stdio.h>
#define MAXN 5010
#define inf 0x3f3f3f
using namespace std;
typedef long long ll;
#define maxn 6100
ll ans=0,cnt,dp[maxn];
char ss[maxn];
int check(int x,int y){
    while(x<y){
        if(ss[x]==ss[y]){
            x++,y--;
        }
        else{
            return 0;
        }
    }
    return 1;
}
int main(){
    scanf("%s",ss+1);
    ll len=strlen(ss+1);
    for(int i=0;i<=len+1;i++) dp[i]=inf;

    dp[0]=0;
    for(int i=1;i<=len;i++){
        for(int j=0;j<i;j++){
            if(check(j+1,i)){

                dp[i]=min(dp[i],dp[j]+1);
            //  cout<<"i= "<<i<<"j= "<<j<<"dp "<<dp[i]<<endl;
            }
        }
    }
//  for(int i=0;i<=len;i++) cout<<dp[i]<<endl;
    cout<<dp[len]<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/81586219