首页 > 其他 > 详细

Partitioning by Palindromes

时间:2014-07-03 21:53:15      阅读:368      评论:0      收藏:0      [点我收藏+]

uva11584:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2631

题意:给你一个串,问你这个串最少被划分成多少个子串,才能使得每个子串都是回文子串。

题解:一开始不知道用什么方法来解题,回来才知道是DP。状态方程:f【i】,表示从0到i,至少被划分的子串个数。转移方程f【i】=min(f【i-1】+1,f【j-1】+1)(其中j表示,从j到i之间的字母构成回文串),然后枚举满足条件的j,最后的答案就是f【len-1】。

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int f[1003];
 7 char str[1002];
 8 bool check(int x,int y){//判断是不是回文串
 9     while(x<y){
10         if(str[y]!=str[x])return false;
11         x++;
12         y--;
13     }
14    return true;
15 }
16 int main(){
17     int T;
18     scanf("%d",&T);
19       while(T--){
20         scanf("%s",str);
21           memset(f,0,sizeof(f));
22           int len =strlen(str);
23           f[0]=1;
24           for(int i=1;i<len;i++){
25             f[i]=f[i-1]+1;
26             for(int j=i-1;j>=0;j--){
27                 if(str[j]==str[i]){
28                     if(check(j,i)){
29                         f[i]=min(f[i],f[j-1]+1);
30                     }
31                 }
32              }
33           }
34        printf("%d\n",f[len-1]);
35       }
36 }
View Code

 

Partitioning by Palindromes,布布扣,bubuko.com

Partitioning by Palindromes

原文:http://www.cnblogs.com/chujian123/p/3821045.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!