Palindromic Subsequence - UVa 11404 dp
来源:互联网 发布:阿里云 功能 编辑:程序博客网 时间:2024/05/22 00:07
Palindromic Subsequence
A Subsequence is a sequence obtained by deleting zero or more characters in a string. A Palindrome is a string which when read from left to right, reads same as when read from right to left. Given a string, find the longest palindromic subsequence. If there are many answers to it, print the one that comes lexicographically earliest.
Constraints
- Maximum length of string is 1000.
- Each string has characters `a' to `z' only.
Input
Input consists of several strings, each in a separate line. Input is terminated by EOF.
Output
For each line in the input, print the output in a single line.
Sample Input
aabbaabbcomputerabzlasamhita
Sample Output
aabbaacabaaha
题意:找到最长的非连续回文字串,并输出字典序最小的。
思路:dp[i][j].num表示从i到j的回文串的最大字符数,dp[i][j].str表示这个最小的字符串,每次如果s[i]==s[j]时,那么两端必取这两个字符,否则的话,取dp[i+1][j]和dp[i][j-1]中字符串字典序最小的。
AC代码如下:
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<cmath>using namespace std;struct node{ int num; string str;}dp[1010][1010];char s[1010],c;int n;int main(){ int i,j,k,p; while(gets(s+1)) { n=strlen(s+1); if(n==0) { printf("\n"); continue; } for(i=1;i<=n;i++) { dp[i][i].num=1; dp[i][i].str=s[i]; dp[i][i-1].str=""; } for(k=1;k<=n;k++) for(i=1;i+k<=n;i++) { j=i+k; dp[i][j].num=max(dp[i+1][j].num,dp[i][j-1].num); if(s[i]==s[j]) { dp[i][j].num=max(dp[i][j].num,dp[i+1][j-1].num+2); dp[i][j].str=s[i]+dp[i+1][j-1].str+s[i]; continue; } if(dp[i][j].num==dp[i+1][j].num && dp[i][j].num==dp[i][j-1].num) { dp[i][j].str=min(dp[i+1][j].str,dp[i][j-1].str); continue; } if(dp[i][j].num==dp[i+1][j].num) dp[i][j].str=dp[i+1][j].str; else if(dp[i][j].num==dp[i][j-1].num) dp[i][j].str=dp[i][j-1].str; } cout<<dp[1][n].str<<endl; }}
0 0
- UVA 11404 - Palindromic Subsequence(dp)
- uva 11404 - Palindromic Subsequence(dp)
- Palindromic Subsequence - UVa 11404 dp
- UVA 11404-Palindromic Subsequence(DP)
- UVA 11404 Palindromic Subsequence
- UVA 11404 Palindromic Subsequence
- UVA 11404 Palindromic Subsequence
- UVA 11404 Palindromic Subsequence
- uva 11404 Palindromic Subsequence
- UVA 11404 Palindromic Subsequence
- UVa 11404 Palindromic Subsequence
- UVa 11404 - Palindromic Subsequence DP LCS---------无限WA
- UVA 11404 Palindromic Subsequence (去除字符DP,4级)
- uva 11404 Palindromic Subsequence (dp+字典序最小路径)
- UVa 11404 - Palindromic Subsequence (最长回文子序列 DP)
- UVa 11404 - Palindromic Subsequence(最大回文串,区间DP)
- UVA 11404 - Palindromic Subsequence LCS
- UVA - 11404 Palindromic Subsequence LCS
- 第12周项目1.4
- WORD2007参考文献自动生成
- unity 文件、图片加载与保存
- Unity MegaFiers 顶点动画
- linux下配置tomcat开机自启动
- Palindromic Subsequence - UVa 11404 dp
- 安卓 (1)教你怎么使用下拉刷新
- mac下命令行程序不能读取资源
- .c和.h文件的困惑
- noip2014被虐记
- 字符串转数组
- Python - KMP算法
- [小技巧] vim cscope 使用时打开新的窗口
- jQuery基础教程笔记-样式和动画