Uva 11584 Partitioning by Palindromes(区间dp)

来源:互联网 发布:苹果电脑播放视频软件 编辑:程序博客网 时间:2024/06/03 15:13

https://uva.onlinejudge.org/external/115/11584.pdf

题意:

给出t个字符串,求每个字符串至少有多少个回文

 

解题思路:

用dp[ i ]来记录到i为止,当前最少的回文数

两个for循环套在一起,形成一个区间(i,j),如果这个区间是一个回文,那么就比较dp[ i ]与dp[ j-1 ] + 1,取小的那一个

 

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define inf 0x3f3f3f3fchar str[1005];int dp[1005];bool judge(int x, int y){while(x>=y){if(str[x]!=str[y]) return false;x--;y++;}return true;}int main(){int t;cin>>t;while(t--){scanf("%s",str+1);int len = strlen(str+1);dp[0] = 0;for(int i=1;i<=len;i++){dp[i] = inf;for(int j=i;j>=1;j--){if(judge(i,j)) dp[i] = min(dp[i],dp[j-1]+1);}}cout<<dp[len]<<endl;}return 0;}


 

0 0
原创粉丝点击