码迷,mamicode.com
首页 > 其他好文 > 详细

Partitioning by Palindromes

时间:2014-07-03 21:52:42      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   art   

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

标签:style   blog   http   color   os   art   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!