Partitioning by Palindromes UVA - 11584

Partitioning by Palindromes

 UVA - 11584

简单dp,类似于背包问题.

总体思路:取(i,j)这一段,如果验证其为回文串(扫一遍),则dp[i]=min(dp[i],dp[j-1]+1).dp[i]是到i这一点回文串的个数

代码:

#include <bits/stdc++.h>
#define ll long long
#define maxn 1008
#define INF 0x3f3f3f3f
using namespace std;
char s[maxn];
int dp[maxn];
int hui(int begin,int end){
    for(int i=begin,j=end;i<=j;i++,j--){
        if(s[i]!=s[j])
            return 0;
    }
    return 1;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%s",s+1);
        int len=strlen(s+1);
        dp[0]=0;
        for(int i=1;i<=len;i++){
            dp[i] = INF;
            for(int j=i;j>=1;j--) {
                int flag = hui(j, i);
                if(flag)
                    dp[i]=min( dp[j-1]+1, dp[i] );
            }
        }
        printf("%d\n",dp[len]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/pipitongkw1/article/details/81585961