回文最小划分次数(dp之路)

来源:互联网 发布:新手怎样开淘宝店 编辑:程序博客网 时间:2024/05/22 04:35


题目:

对输入的字符串划分为一组回文字符串,最小的分割次数


转换方程:dp[j]=min(dp[j],dp[k-1]+1)


代码:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int inf=0x3f3f3f3f;const int maxn=5000+10;char a[maxn];int dp[maxn];int main(){    int i,j,k,n;    while(scanf("%s",a+1)!=EOF)    {        n=strlen(a+1);        dp[0]=0;        for(i=1; i<=n; i++)             dp[i]=inf;        for(i=1; i<=n; i++)        {            for(j=i,k=i; j<=n&&k>0; j++,k--)            {                if(a[j]==a[k])                     dp[j]=min(dp[j],dp[k-1]+1);                else                     break;            }            for(j=i+1,k=i; j<=n&&k>0; j++,k--)            {                if(a[j]==a[k])                     dp[j]=min(dp[j],dp[k-1]+1);                else                     break;            }        }        printf("%d\n",dp[n]);    }    return 0;}


0 0
原创粉丝点击