uva 11584 计算最少回文串数 动态规划 lrj-P276

来源:互联网 发布:excel2010编程教程 编辑:程序博客网 时间:2024/06/07 01:31

题意:

将一个字符串化分成最少的部分,每一个部分都是回文串

Sample Input

3

racecar

fastcar

aaadbccb

Sample Output

1

7

3

题解:

如果 区间(j,i)是回文串,那么就

if(judge(j,i))      dp[i]=min(dp[i],dp[j-1]+1);
初始化dp【i】= i

详细见代码


#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int dp[1010];char str[1010];int judge(int a,int b){    while(a<=b&&str[a]==str[b])        a++,b--;    return a>=b;}int main(){    int T;    //freopen("in.txt","r",stdin);    scanf("%d",&T);    while(T--)    {        dp[0]=0;        scanf("%s",str+1);        int len=strlen(str+1);        for(int i=1;i<=len;i++){            dp[i]=i;            for(int j=1;j<=i;j++){                if(judge(j,i))                    dp[i]=min(dp[i],dp[j-1]+1);            }        }        printf("%d\n",dp[len]);    }    return 0;}


原创粉丝点击