UVa 11404 回文子序列(LCS求最长回文串长度)
https://vjudge.net/problem/UVA-11404
题意:
给定一个由小写字母组成的字符串,删除其中的0个或多个字符,使得剩下的字母(顺序不变)组成一个尽量长的回文串。如果有多解,输出字典序最小的解。
思路:
首先,最长回文子串的长度可以通过正序字符串和逆序字符串进行LCS得出。
但是这道题目麻烦的是还要输出这个回文串,并且字典序得最小。
应用的主要还是LCS的思想方法,不过在进行状态转移的时候,再加上字符串的状态转移。
不过最后得到的字符串不一定是回文串,但是它的前一半肯定是回文串的一半,那么后面的一半只需要根据前面的就可以得出。
http://blog.csdn.net/shuangde800/article/details/9898675参考自该博客。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = + ; char str1[maxn],str2[maxn]; struct node
{
int len;
string str;
}f[maxn][maxn]; int main()
{
//freopen("in.txt","r",stdin);
while(gets(str1+))
{
int len = strlen(str1+);
for(int i=len;i>=;i--)
str2[i]=str1[len-i+]; for(int i=;i<=len;i++)
{
f[][i].len=;
f[][i].str="";
} for(int i=;i<=len;i++)
{
for(int j=;j<=len;j++)
{
if(str1[i]==str2[j])
{
f[i][j].len=f[i-][j-].len+;
f[i][j].str=f[i-][j-].str+str1[i];
}
else
{
if(f[i][j-].len > f[i-][j].len)
{
f[i][j].len=f[i][j-].len;
f[i][j].str=f[i][j-].str;
}
else if(f[i][j-].len < f[i-][j].len)
{
f[i][j].len=f[i-][j].len;
f[i][j].str=f[i-][j].str;
}
else
{
f[i][j].len=f[i-][j].len;
f[i][j].str=min(f[i-][j].str,f[i][j-].str);
}
}
}
} int maxlen=f[len][len].len;
string line=f[len][len].str; if(maxlen&)
{
for(int i=;i<=maxlen/;i++)
printf("%c",line[i]);
for(int i=maxlen/-;i>=;i--)
printf("%c",line[i]);
}
else
{
for(int i=;i<maxlen/;i++)
printf("%c",line[i]);
for(int i=maxlen/-;i>=;i--)
printf("%c",line[i]);
}
printf("\n");
}
return ;
}
UVa 11404 回文子序列(LCS求最长回文串长度)的更多相关文章
- 最长回文子序列LCS,最长递增子序列LIS及相互联系
最长公共子序列LCS Lintcode 77. 最长公共子序列 LCS问题是求两个字符串的最长公共子序列 \[ dp[i][j] = \left\{\begin{matrix} & max(d ...
- hdu 3068 最长回文 【Manacher求最长回文子串,模板题】
欢迎关注__Xiong的博客: http://blog.csdn.net/acmore_xiong?viewmode=list 最长回文 ...
- 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297
1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...
- Manacher算法 - 求最长回文串的利器
求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...
- hdu 3068 最长回文(manachar求最长回文子串)
题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...
- PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- Manacher算法(马拉车)求最长回文子串
Manacher算法求最长回文字串 算法思路 按照惯例((・◇・)?),这里只是对算法的一些大体思路做一个描述,因为找到了相当好理解的博客可以参考(算法细节见参考文章). 一般而言,我们的判断回文算法 ...
- Manacher模板( 线性求最长回文子串 )
模板 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> us ...
- [hdu3068 最长回文]Manacher算法,O(N)求最长回文子串
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意:求一个字符串的最长回文子串 思路: 枚举子串的两个端点,根据回文串的定义来判断其是否是回文 ...
随机推荐
- Java初学者笔记五:泛型处理
一.泛型类: 泛型是指适用于某一种数据类型而不是一个数据机构中能存不同类型 import java.io.*; import java.nio.file.Files; import java.nio. ...
- Egret类class和module写法区别
普通类 Test.ts class Test { public name:string = "Test"; public run(){ console.log(this.name) ...
- 【BZOJ5100】[POI2018]Plan metra 构造
[BZOJ5100][POI2018]Plan metra Description 有一棵n个点的无根树,每条边有一个正整数权值,表示长度,定义两点距离为在树上的最短路径的长度. 已知2到n-1每个点 ...
- ThinkPHP的增删改查!
对表的操作: 增加:M('表名')->add($data); (可以是数组) 删除:M('表名')->delete($data); (不可以是数组,删除多个有另外的方法) 修改:M('表 ...
- angularJS的路由!
angularJS 路由:(分发需求) angularJS 中路由是单独提供的功能模块,ngRoute 也是一个单独发行的文件 可以通过 npm 去安装这个包:angular-route <s ...
- pta 习题集 5-15 数组循环左移
本题要求实现一个对数组进行循环左移的简单函数:一个数组aa中存有nn(>0>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向左移mm(≥0≥0)个位置,即将aa中的数据由(a0a ...
- opencv中Mat格式的数据访问.at
opencv3中图形存储基本为Mat格式,如果我们想获取像素点的灰度值或者RGB值,可以通过image.at<uchar>(i,j)的方式轻松获取. Mat类中的at方法对于获取图像矩阵某 ...
- Java spring mvc多数据源配置
1.首先配置两个数据库<bean id="dataSourceA" class="org.apache.commons.dbcp.BasicDataSource&q ...
- 自动化测试学习day4
主要学习内容:修改文件.集合.函数.模块 修改文件两种方法 修改文件方法一(缺点:代码繁琐,一次性将文件读出,文件过大可能会卡住) with open('geci', 'a+', encoding=' ...
- Monkey Tradition---LightOj1319(中国剩余定理模板)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1319 题意:有 n 个猴子,n 棵树,树的高度为 L ,每个猴子刚开始的时候都在树的底 ...