LIGHTOJ 1044(动态规划)

来源:互联网 发布:植物大战僵尸2淘宝存档 编辑:程序博客网 时间:2024/04/27 15:16

题意:给你一个字符串,让你找出回文串的最少个数


题解:查询当前字符与前面字符子串是否构成回文串,如果构成则 dp[i] = min(dp[i],dp[j-1]+1);


#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int dp[1005];char str[1005];bool find(int k,int r){    while(k < r)    {        if(str[k] == str[r])  k++,r--;        else  return false;    }    return true;}int main(){    int n,Case = 1;;    scanf("%d",&n);    getchar();    while(n--)    {        scanf("%s",str);        int l = strlen(str);        for(int i = 0; i < l; i++)        {            dp[i] = i + 1;            for(int j = 0; j <= i; j++)            {                if(find(j,i))                {                    if(j == 0)                        dp[i] = 1;                    else                        dp[i] = min(dp[i],dp[j - 1] + 1);                }            }        }        printf("Case %d: %d\n",Case++,dp[l-1]);    }}


0 0