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求最长回文串长度)的更多相关文章

  1. 最长回文子序列LCS,最长递增子序列LIS及相互联系

    最长公共子序列LCS Lintcode 77. 最长公共子序列 LCS问题是求两个字符串的最长公共子序列 \[ dp[i][j] = \left\{\begin{matrix} & max(d ...

  2. hdu 3068 最长回文 【Manacher求最长回文子串,模板题】

    欢迎关注__Xiong的博客: http://blog.csdn.net/acmore_xiong?viewmode=list 最长回文                                 ...

  3. 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297

    1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...

  4. Manacher算法 - 求最长回文串的利器

    求最长回文串的利器 - Manacher算法 Manacher主要是用来求某个字符串的最长回文子串. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复 ...

  5. hdu 3068 最长回文(manachar求最长回文子串)

    题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...

  6. PAT甲题题解-1040. Longest Symmetric String (25)-求最长回文子串

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789177.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. Manacher算法(马拉车)求最长回文子串

    Manacher算法求最长回文字串 算法思路 按照惯例((・◇・)?),这里只是对算法的一些大体思路做一个描述,因为找到了相当好理解的博客可以参考(算法细节见参考文章). 一般而言,我们的判断回文算法 ...

  8. Manacher模板( 线性求最长回文子串 )

    模板 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> us ...

  9. [hdu3068 最长回文]Manacher算法,O(N)求最长回文子串

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意:求一个字符串的最长回文子串 思路: 枚举子串的两个端点,根据回文串的定义来判断其是否是回文 ...

随机推荐

  1. HTML5+CSS3 表格设计(Table)

    <style> body { width: 600px; margin: 40px auto; font-family: 'trebuchet MS', 'Lucida sans', Ar ...

  2. Thrift入门之mac下的安装流程

    新建一个maven项目,先下载maven依赖  http://thrift.apache.org/download <dependency> <groupId>org.apac ...

  3. 树链剖分-点的分治(链的点的个数为k的点对数)

    hdu4760 Cube number on a tree Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65535/65535 ...

  4. 无向连通图求割点(tarjan算法去掉改割点剩下的联通分量数目)

    poj2117 Electricity Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 3603   Accepted: 12 ...

  5. [Linux]ssh相关问题

    ssh链接不上的最可能原因是防火墙没关,一般提示“connection refused”. 可以使用这个命令查看:#service iptables status 暂时关闭iptables,重启后还会 ...

  6. 玩转Javascript 给JS写测试

    给js写测试已经不是什么稀奇的事情了,最近项目里用了jasmine和JsTestDriver两种js测试框架.JsTestDriver易于与持续构建系统相集成并能够在多个浏览器上运行测试轻松实现TDD ...

  7. SQL---->mySQl查看和更改端口

    修改端口: 采用dmg方式安装的mysql,默认启动端口为3307,不是默认的3306.如果想改为3306,可以编辑 /Library/LaunchDaemons     /com.Oracle.os ...

  8. Nginx高级玩法

    1. Nginx获取自定义消息头 .nginx是支持读取非nginx标准的用户自定义header的,但是需要在http或者server下开启header的下划线支持: underscores_in_h ...

  9. 信号(Django信号、Flask信号、Scrapy信号)

    简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...

  10. (2.11)Mysql之SQL基础——存储过程与变量

    (2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...