uva 11584 Partitioning by Palindromes dp入门题

来源:互联网 发布:ui切图用什么软件 编辑:程序博客网 时间:2024/06/03 14:59

dp[i]表示前i个最少构成几个回文

所以转移方程为    如果(j-i)是一个回文    则  dp[i]=min(dp[i],dp[j-1]+1)   (j<i)



#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <iostream>#include <map>#include <vector>#include <algorithm>using namespace std;#define clr(a, x) memset(a, x, sizeof(a))#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define REP(i,a,b) for(int i=a;i<=b;i++)const int maxn = 1010 ;char s[maxn];int dp[maxn];bool par(int i,int j){    int l=i,r=j;    while(l<r)    {        if(s[l]==s[r])            l++,r--;        else            return 0;    }    return 1;}int main(){    int T;    scanf("%d",&T);    while(T--)    {        scanf("%s",s+1);        int len=strlen(s+1);        //fill(dp,dp+len,maxn);        dp[0]=0;        for(int i=1;i<=len;i++)        {            dp[i]=dp[i-1]+1;            for(int j=i-1;j>=0;j--)            {                if(par(j,i))                    dp[i]=min(dp[i],dp[j-1]+1);            }        }        printf("%d\n",dp[len]);    }    return 0;}


原创粉丝点击