uva 11404 dp
UVA 11404 - Palindromic Subsequence
求给定字符串的最长回文子序列,长度一样的输出字典序最小的。
对于 [l, r] 区间的最长回文串。他可能是[l+1, r] 和[l, r-1]两个区间的结果。
或者当s[l] == s[r]时,区间[l+1, r-1]的结果再加上以s[l], s[r]为首尾的子序列。
dp[l][r] = ans(dp[l][r-1], dp[l+1][r], s[l] + dp[l+1][r-1] + s[r])
dp存的是子序列,即一个string。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int MAXN = 1000 + 5; string s;
string dp[MAXN][MAXN]; void init() {
for (int i=0; i<MAXN; i++) {
for (int j=0; j<MAXN; j++) {
dp[i][j] = "#";
}
}
} string DP(int l, int r) {
if (dp[l][r] != "#") return dp[l][r];
if (l > r) return dp[l][r] = "";
if (l == r) return dp[l][r] = string(1, s[l]); string a, b, c, res; a = DP(l+1, r);
b = DP(l, r-1);
c = DP(l+1, r-1); if (a.size() < b.size()) res = b;
else if (a.size() > b.size()) res = a;
else if (a < b) res = a;
else res = b; if (s[l] == s[r]) {
c = string(1, s[l]) + c + string(1, s[r]);
}
if (res.size() == c.size()) {
if (res > c) res = c;
} else if (res.size() < c.size()) res = c; return dp[l][r] = res;
} int main () {
for (; cin >> s; ) { init(); string ans = DP(0, s.size()-1); cout << ans << endl;
}
return 0;
}
uva 11404 dp的更多相关文章
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA 11404 五 Palindromic Subsequence
Palindromic Subsequence Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- 【UVA 11404】Palindromic Subsequence
UVA 11404 我用了最暴力的做法:考虑\(dp[i][j]\)表示\(S[i..j]\)的最长回文子序列的长度以及字典序最小的那个. 然后转移的时候如下处理:首先\(dp[i][j]\)要取\( ...
- LPS UVA 11404 Palindromic Subsequence
题目传送门 题意:求LPS (Longest Palidromic Subsequence) 最长回文子序列.和回文串不同,子序列是可以不连续的. 分析:1. 推荐->还有一种写法是用了LCS的 ...
- UVA 11404 简单LCS模型DP 字典序比较
这个题目求某个字符串中含的最长的回文子串. 就是一个很简单的LCS模型吗,而且我不明白为什么网上这么多人都说仿照某写法把字符串先逆序一下,然后求LCS,我只想问一下,有必要吗? 直接按LCS的套路来就 ...
- UVA 11404 Palindromic Subsequence
Palindromic Subsequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA ...
- uva 1401 dp+Trie
http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 11552 dp
UVA 11552 - Fewest Flops 一个字符串,字符串每 k 个当作一组,组中的字符顺序能够重组.问经过重组后改字符串能够编程最少由多少块字符组成.连续的一段字符被称为块. dp[i][ ...
- uva 10271 (dp)
题意:有n个数据,给定k,要从中选出k+8个三元组(x,y,z,其中x<=y<=z),每选一次的代价为(x-y)^2,求最小代价和. [解题方法] 将筷子按长度从大到小排序 排序原因: 由 ...
随机推荐
- 【BZOJ1030】文本生成器(容斥原理,AC自动机,计数DP)
题意:给出n个字符串,求长为m至少包含n个里其中一个的串的字符串一共有多少个,字符集为A到Z,答案对10007取模 n<=60,len<=100 思路:将至少一个转化为所有个数减去没有出现 ...
- echarts中关于merge的代码
function merge(target, source, overwrite) { // We should escapse that source is string // and enter ...
- duilib入门简明教程 -- XML基础类(7) (转)
原文转自:http://www.cnblogs.com/Alberl/p/3343743.html 现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是 ...
- Logger用法
logger的输出有两种方式:①log.log(Level.INFO,"message")②log.info("mesage")其他级别的输出与此类似. 获得c ...
- ubuntu16.04安装docker CE
如需开始在 Ubuntu 上使用 Docker CE,请确保您满足先决条件,然后再安装 Docker. 如需安装 Docker 企业版 (Docker EE),请转至获取适用于 Ubuntu 的 Do ...
- 只用一次循环开销 将类似 1 A 、1 B 的数据返回成为 1 A,B 的拼接形式
/// <summary> ///将类似 1 A .1 B 的数据返回成为 1 A,B 的拼接形式 /// </summary> /// <param name=&quo ...
- IntelliJ IDEA安装MongoDB的的数据操作插件
说明:只能说效果一般,没有Robo 3T那么好用. 参考: https://intellij-support.jetbrains.com/hc/en-us/community/posts/206635 ...
- .Net 多线程小结
1.简述 一般一个程序一个进程,代码是存在进程中的,进程本身不执行代码, 执行代码的是线程. 一般一个进程里就一个线程.(一个商店就一个老板娘.) 进程就是在内存中开辟了一个空间.代码,图片..等就 ...
- js对象浅拷贝和深拷贝详解
js对象浅拷贝和深拷贝详解 作者:i10630226 字体:[增加 减小] 类型:转载 时间:2016-09-05我要评论 这篇文章主要为大家详细介绍了JavaScript对象的浅拷贝和深拷贝代码,具 ...
- linux基础学习6
daemon 可以理解成为service 两大类: stand_alone:此 daemon 可以自行单独启动服务,加载到内存后就一直占用内存与系统资源:如 www的httpd ,ftp的vsft ...