UVA - 11404

题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串


不要求路径区间DP都可以做

然而要字典序最小

倒过来求LCS,转移同时维护f[i][j].s为当前状态字典序最小最优解

f[n][n].s的前半部分一定是回文串的前半部分(想想就行了)

当s的长度为奇时要多输出一个(因为这样长度+1,并且字典序保证最小(如axyzb  bzyxa,就是axb|||不全是回文串的原因是后半部分的字典序回文串可能不是最小,多加的这一个是回文之间夹着的字典序最小的))

  1. //
  2. // main.cpp
  3. // uva11404
  4. //
  5. // Created by Candy on 03/11/2016.
  6. // Copyright © 2016 Candy. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include <cstdio>
  11. #include <algorithm>
  12. #include <cstring>
  13. using namespace std;
  14. const int N=1e3+;
  15. char a[N],b[N];
  16. int n;
  17. //void dp(){
  18. // n=strlen(a+1);
  19. // ans=0;
  20. // //for(int i=1;i<=n;i++) f[i][i]=1;
  21. // for(int i=n;i>=1;i--){
  22. // f[i][i]=1;
  23. // for(int j=i+1;j<=n;j++){
  24. // f[i][j]=max(f[i+1][j],f[i][j-1]);
  25. // if(a[i]==a[j]) f[i][j]=max(f[i][j],f[i+1][j-1]+1);
  26. // }
  27. // }
  28. //}
  29. struct data{
  30. int v;
  31. string s;
  32. data(){v=;s="";}
  33. }f[N][N];
  34. void dp(){
  35. for(int i=;i<=n;i++) b[i]=a[n-i+];
  36.  
  37. for(int i=;i<=n;i++)
  38. for(int j=;j<=n;j++){
  39. if(a[i]==b[j]){
  40. f[i][j].v=f[i-][j-].v+;
  41. f[i][j].s=f[i-][j-].s+a[i];
  42. }else{
  43. if(f[i][j-].v>f[i-][j].v){
  44. f[i][j].v=f[i][j-].v;
  45. f[i][j].s=f[i][j-].s;
  46. }else if(f[i-][j].v>f[i][j-].v){
  47. f[i][j].v=f[i-][j].v;
  48. f[i][j].s=f[i-][j].s;
  49. }else{
  50. f[i][j].v=f[i][j-].v;
  51. f[i][j].s=min(f[i][j-].s,f[i-][j].s);
  52. }
  53. }
  54. }
  55. }
  56. int main(int argc, const char * argv[]) {
  57. while(scanf("%s",a+)!=EOF){
  58. n=strlen(a+);
  59. dp();
  60. int len=f[n][n].v;
  61. string s=f[n][n].s;
  62. if(len&){
  63. len/=;
  64. for(int i=;i<len;i++) putchar(s[i]);
  65. for(int i=len;i>=;i--) putchar(s[i]);//!
  66. }else{
  67. len/=;
  68. for(int i=;i<len;i++) putchar(s[i]);
  69. for(int i=len-;i>=;i--) putchar(s[i]);
  70. }
  71. putchar('\n');
  72. }
  73.  
  74. return ;
  75. }

UVA 11404 Palindromic Subsequence[DP LCS 打印]的更多相关文章

  1. LPS UVA 11404 Palindromic Subsequence

    题目传送门 题意:求LPS (Longest Palidromic Subsequence) 最长回文子序列.和回文串不同,子序列是可以不连续的. 分析:1. 推荐->还有一种写法是用了LCS的 ...

  2. UVA 11404 Palindromic Subsequence

    Palindromic Subsequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA ...

  3. UVa 11404 Palindromic Subsequence (LCS)

    题意:给定一个字符串,问删除一些字符,使得它成为一个最长回访串,如果有多个,输出字典序最小的那个. 析: 我们可以把原字符串反转,然后求两个串的LCS,就得到最长回文串,不过要注意一些细节. 代码如下 ...

  4. UVA 531 - Compromise(dp + LCS打印路径)

      Compromise  In a few months the European Currency Union will become a reality. However, to join th ...

  5. UVA 10405 Longest Common Subsequence (dp + LCS)

    Problem C: Longest Common Subsequence Sequence 1: Sequence 2: Given two sequences of characters, pri ...

  6. 【UVa】Palindromic Subsequence(dp+字典序)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=465&page=s ...

  7. uva 111 - History Grading (dp, LCS)

    题目链接 题意:给N,第二行是答案,n个数c1---cn, 代表第一个的顺序是c1,第二个数顺序是c2; 下面每一行是学生的答案,格式同上. 注意:这个给的顺序需要处理一下,不能直接用. 思路:LCS ...

  8. uva 11404 dp

    UVA 11404 - Palindromic Subsequence 求给定字符串的最长回文子序列,长度一样的输出字典序最小的. 对于 [l, r] 区间的最长回文串.他可能是[l+1, r] 和[ ...

  9. UVA 11404 五 Palindromic Subsequence

     Palindromic Subsequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu ...

随机推荐

  1. 分布式系统设计权衡之CAP

    写在最前: 1.为什么学习并记录分布式设计理念一系列相关的东西 在日常工作中系统设计评审的时候,经常会有一些同事抛出一些概念,高可用性,一致性等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是 ...

  2. 谈一谈.net析构函数对垃圾回收的影响

    之前忘了说了 代码都是在Release模式下运行的,现在补充上. 这里说析构函数,其实并不准确,应该叫Finalize函数,Finalize函数形式上和c++的析构函数很像 ,都是(~ClassNam ...

  3. php图片验证码为什么必须加上ob_clean();才能正常显示。

    ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的网站有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区. If you work on an extremely lar ...

  4. 在PHP语言中使用JSON和将json还原成数组

    在之前我写过php返回json数据简单实例,刚刚上网,突然发现一篇文章,也是介绍json的,还挺详细,值得参考.内容如下 从5.2版本开始,PHP原生提供json_encode()和json_deco ...

  5. Servlet转码问题

    HttpServletRequest获取页面数据 提交表单时,Servlet直接从页面通过HttpServletRequest对象的getParameter(String arg0)获取参数时 默认编 ...

  6. 工业串口和网络软件通讯平台(SuperIO 2.0)发布

    下载:SuperIO 2.0(开发手册.Demo.组件包) 官网:进入 交流群:54256083 SuperIO 2.0版本正式发布.把SCL正式更改名称为SuperIO. 一.此次升级主要包括两个方 ...

  7. Hibernate @OneToMany等注解设置查询过滤条件等

    1.如实体PdOrg对象中有users对象,数据库user表有字段DEL_FLAG(0:删除:1:未删除): private List<User> users= new ArrayList ...

  8. 复杂的xml转化为java实体

    一.样例一: 以根据订单号向支付宝查询支付是否成功为例(成功信息) 失败信息: <?xml version="1.0" encoding="utf-8"? ...

  9. jQuery Validation Engine 表单验证

    功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外,还可以添加自定义的验证规则. 兼容 IE 6+, Chrome, ...

  10. js 循环li添加点击事件 (闭包的应用)

    var aLi = document.querySelectorAll('.article-tab li');  for (var i = 0; i <= aLi.length; i++) {  ...