UVA 11404 Palindromic Subsequence[DP LCS 打印]
| UVA - 11404 |
题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串
不要求路径区间DP都可以做
然而要字典序最小
倒过来求LCS,转移同时维护f[i][j].s为当前状态字典序最小最优解
f[n][n].s的前半部分一定是回文串的前半部分(想想就行了)
当s的长度为奇时要多输出一个(因为这样长度+1,并且字典序保证最小(如axyzb bzyxa,就是axb|||不全是回文串的原因是后半部分的字典序回文串可能不是最小,多加的这一个是回文之间夹着的字典序最小的))
//
// main.cpp
// uva11404
//
// Created by Candy on 03/11/2016.
// Copyright © 2016 Candy. All rights reserved.
// #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=1e3+;
char a[N],b[N];
int n;
//void dp(){
// n=strlen(a+1);
// ans=0;
// //for(int i=1;i<=n;i++) f[i][i]=1;
// for(int i=n;i>=1;i--){
// f[i][i]=1;
// for(int j=i+1;j<=n;j++){
// f[i][j]=max(f[i+1][j],f[i][j-1]);
// if(a[i]==a[j]) f[i][j]=max(f[i][j],f[i+1][j-1]+1);
// }
// }
//}
struct data{
int v;
string s;
data(){v=;s="";}
}f[N][N];
void dp(){
for(int i=;i<=n;i++) b[i]=a[n-i+]; for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
if(a[i]==b[j]){
f[i][j].v=f[i-][j-].v+;
f[i][j].s=f[i-][j-].s+a[i];
}else{
if(f[i][j-].v>f[i-][j].v){
f[i][j].v=f[i][j-].v;
f[i][j].s=f[i][j-].s;
}else if(f[i-][j].v>f[i][j-].v){
f[i][j].v=f[i-][j].v;
f[i][j].s=f[i-][j].s;
}else{
f[i][j].v=f[i][j-].v;
f[i][j].s=min(f[i][j-].s,f[i-][j].s);
}
}
}
}
int main(int argc, const char * argv[]) {
while(scanf("%s",a+)!=EOF){
n=strlen(a+);
dp();
int len=f[n][n].v;
string s=f[n][n].s;
if(len&){
len/=;
for(int i=;i<len;i++) putchar(s[i]);
for(int i=len;i>=;i--) putchar(s[i]);//!
}else{
len/=;
for(int i=;i<len;i++) putchar(s[i]);
for(int i=len-;i>=;i--) putchar(s[i]);
}
putchar('\n');
} return ;
}
UVA 11404 Palindromic Subsequence[DP LCS 打印]的更多相关文章
- LPS UVA 11404 Palindromic Subsequence
题目传送门 题意:求LPS (Longest Palidromic Subsequence) 最长回文子序列.和回文串不同,子序列是可以不连续的. 分析:1. 推荐->还有一种写法是用了LCS的 ...
- UVA 11404 Palindromic Subsequence
Palindromic Subsequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA ...
- UVa 11404 Palindromic Subsequence (LCS)
题意:给定一个字符串,问删除一些字符,使得它成为一个最长回访串,如果有多个,输出字典序最小的那个. 析: 我们可以把原字符串反转,然后求两个串的LCS,就得到最长回文串,不过要注意一些细节. 代码如下 ...
- UVA 531 - Compromise(dp + LCS打印路径)
Compromise In a few months the European Currency Union will become a reality. However, to join th ...
- UVA 10405 Longest Common Subsequence (dp + LCS)
Problem C: Longest Common Subsequence Sequence 1: Sequence 2: Given two sequences of characters, pri ...
- 【UVa】Palindromic Subsequence(dp+字典序)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=465&page=s ...
- uva 111 - History Grading (dp, LCS)
题目链接 题意:给N,第二行是答案,n个数c1---cn, 代表第一个的顺序是c1,第二个数顺序是c2; 下面每一行是学生的答案,格式同上. 注意:这个给的顺序需要处理一下,不能直接用. 思路:LCS ...
- uva 11404 dp
UVA 11404 - Palindromic Subsequence 求给定字符串的最长回文子序列,长度一样的输出字典序最小的. 对于 [l, r] 区间的最长回文串.他可能是[l+1, r] 和[ ...
- UVA 11404 五 Palindromic Subsequence
Palindromic Subsequence Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
随机推荐
- EC笔记:第二部分:12、复制对象时勿忘其每一个成分
EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ p ...
- 突如其来的"中断异常",我(Java)该如何处理?
一.何为异常? 1.生活中的实例 生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 ....... 2.程序中的实例 我们的代码中也许存在许多纰漏,导致用户使用时程序突 ...
- 在Eclipse中使用Junit进行单元测试练习 实现最大子数组和算法
1.如何在MAC OS X下安装配置java开发工具 http://www.cnblogs.com/coderL/p/5939541.html 2.最大子数组和算法 附上程序运行及测试截图,源码见后 ...
- PHP的变量和常量
- 从头开始搭建一个mybatis+postgresql平台
最近有个项目的数据库使用postgresql,使用原生态的mybatis操作数据,原生态的没什么不好,只不过国内有个tk.mybatis的工具帮助我们做了很多实用的事情,大多数情况下我们需要 ...
- (原)3.4 Zookeeper应用 - 分布式锁
本文为原创文章,转载请注明出处,谢谢 分布式锁 1.原理 建立表示锁的父节点(图中locker节点) 每个争抢锁的服务器在locker节点下创建有序的临时节点 判断自己是否抢到锁:获取locker下所 ...
- MVC的增删改查
基本都要使用C控制器中的两个action来完成操作,一个用于从主界面跳转到新页面.同时将所需操作的数据传到新界面,另一个则对应新界面的按钮,用于完成操作.将数据传回主界面以及跳转回主界面.根据不同情况 ...
- JS高程3.基本概念(1)
1.语法 (1)ECMAScript中的一切(变量,函数名和操作符)都是区分大小写的. (2)标识符 标识符的第一个字符必须是字母,下划线或是美元符号. 其他字符可以是字母,下划线,美元符号和数字. ...
- .NET 各种框架
基于.NET平台常用的框架整理 分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度 ...
- iOS Version 和 Build 版本号
Version 和 Build 版本号 开发者都知道,无论是对于 iOS 和 Android 的应用,每个应用都有两个不同的版本号.分别是: Version Build(在 Android 上叫 Ve ...