http://acm.hdu.edu.cn/showproblem.php?pid=1503

这道题又WA了好几次

在裸最长公共子串基础上加了回溯功能,就是给三种状态各做一个

不同的标记。dp[n][m]开始回找,找到这条最长串的组成。

WA点有几个都被我遇到了

一个是最长公共串为0时,两个串直接输出

一个是最长公共串为1时,后续串的处理

这里要记得是dp回溯的方式

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<string>
  5. #include<stack>
  6. #include<cstring>
  7. using namespace std;
  8. struct donser
  9. {
  10. int x,y;
  11. };
  12. int main()
  13. {
  14. string s,t;
  15. while(cin>>s>>t)
  16. {
  17. int i,j,m=,n=,a1,b1,a2,b2;
  18. stack<donser> sta;
  19. struct donser dong;
  20. struct donser dongs;
  21. int dp[][],lable[][];
  22. n=s.length();
  23. m=t.length();
  24. for(i=;i<n;i++)
  25. {
  26. for(j=;j<m;j++)
  27. {
  28. if(s[i]==t[j])
  29. {
  30. dp[i+][j+]=dp[i][j]+;
  31. lable[i+][j+]=;
  32. }
  33. else
  34. {
  35. if(dp[i][j+]>dp[i+][j])
  36. {
  37. dp[i+][j+]=dp[i][j+];
  38. lable[i+][j+]=;
  39. }
  40. else
  41. {
  42. dp[i+][j+]=dp[i+][j];
  43. lable[i+][j+]=;
  44. }
  45. }
  46. }
  47. }
  48. i=n;j=m;a1=a2=n;b1=b2=m;
  49. if(dp[n][m]==){cout<<s<<t<<endl;}
  50. else{
  51. while(lable[i][j]!=)
  52. {
  53. if(lable[i][j]==)
  54. {
  55. i--;j--;
  56. dong.x=i;
  57. dong.y=j;
  58. sta.push(dong);
  59. }
  60. else if(lable[i][j]==)
  61. {
  62. i--;
  63. }
  64. else if(lable[i][j]==)
  65. {
  66. j--;
  67. }
  68. }
  69. if(sta.empty()!=)
  70. {
  71. dong=sta.top();
  72. sta.pop();
  73. a1=dong.x;
  74. b1=dong.y;
  75. for(i=;i<a1;i++)
  76. {
  77. cout<<s[i];
  78. }
  79. for(i=;i<b1;i++)
  80. {
  81. cout<<t[i];
  82. }
  83. }
  84. if(sta.empty()==)
  85. {
  86. for(i=a1;i<n;i++)
  87. {
  88. cout<<s[i];
  89. }
  90. for(i=b1+;i<m;i++)
  91. {
  92. cout<<t[i];
  93. }
  94. }
  95. while(sta.empty()!=)
  96. {
  97. a1=dong.x;
  98. b1=dong.y;
  99. dongs=sta.top();
  100. sta.pop();
  101. a2=dongs.x;
  102. b2=dongs.y;
  103. for(i=a1;i<a2;i++)
  104. {
  105. cout<<s[i];
  106. }
  107. for(j=b1+;j<b2;j++)
  108. {
  109. cout<<t[j];
  110. }
  111. dong=dongs;
  112. }
  113. for(i=a2;i<n;i++)
  114. {
  115. cout<<s[i];
  116. }
  117. for(i=b2+;i<m;i++)
  118. {
  119. cout<<t[i];
  120. }
  121. cout<<endl;}
  122. }
  123. return ;
  124. }

HDU 1503 带回朔路径的最长公共子串的更多相关文章

  1. HDU 1403 Longest Common Substring(最长公共子串)

    http://acm.hdu.edu.cn/showproblem.php?pid=1403 题意:给出两个字符串,求最长公共子串的长度. 思路: 刚开始学后缀数组,确实感觉很难,但是这东西很强大,所 ...

  2. HDU 1403 Longest Common Substring(后缀数组,最长公共子串)

    hdu题目 poj题目 参考了 罗穗骞的论文<后缀数组——处理字符串的有力工具> 题意:求两个序列的最长公共子串 思路:后缀数组经典题目之一(模版题) //后缀数组sa:将s的n个后缀从小 ...

  3. HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS)

    HDU 1423 Greatest Common Increasing Subsequence(最长公共上升LCIS) http://acm.hdu.edu.cn/showproblem.php?pi ...

  4. 动态规划(一)——最长公共子序列和最长公共子串

    注: 最长公共子序列采用动态规划解决,由于子问题重叠,故采用数组缓存结果,保存最佳取值方向.输出结果时,则自顶向下建立二叉树,自底向上输出,则这过程中没有分叉路,结果唯一. 最长公共子串采用参考串方式 ...

  5. DP:LCS(最长公共子串、最长公共子序列)

    1. 两者区别 约定:在本文中用 LCStr 表示最长公共子串(Longest Common Substring),LCSeq 表示最长公共子序列(Longest Common Subsequence ...

  6. 最长公共子序列&最长公共子串

    首先区别最长公共子串和最长公共子序列  LCS(计算机科学算法:最长公共子序列)_百度百科 最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. 最长公共子序列: http ...

  7. BZOJ 2946 POI2000 公共串 后缀自动机(多串最长公共子串)

    题意概述:给出N个字符串,每个串的长度<=2000(雾...可能是当年的年代太久远机子太差了),问这N个字符串的最长公共子串长度为多少.(N<=5) 抛开数据结构,先想想朴素做法. 设计一 ...

  8. [Data Structure] LCSs——最长公共子序列和最长公共子串

    1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...

  9. 最长公共子序列PK最长公共子串

    1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. (1)递归方法求最长公共子序列的长度 1) ...

随机推荐

  1. Python capitalize()方法

    Python capitalize()方法 capitalize()方法返回字符串的一个副本,只有它的第一个字母大写.对于8位的字符串,这个方法与语言环境相关. 语法 以下是capitalize()方 ...

  2. LaTex 使用 - 配置

    Reference Link: http://www.howtotex.com/howto/installing-latex-on-windows/ MikTeX:http://miktex.org/ ...

  3. C++ Scripting

    http://www.quepublishing.com/articles/article.aspx?p=26069

  4. php构造函数extends

    extends的继续关系 page继承Dapta:也就是page拥有data的所有功能. <?php class Data{ function f(){ "; } } class Pa ...

  5. JavaScript 函数参数传递到底是值传递还是引用传递

    tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里 ...

  6. org.apache.http.client.HttpClient; HttpClient 4.3超时设置

    可用的code import org.apache.commons.lang.StringUtils;import org.apache.http.HttpEntity;import org.apac ...

  7. ImageTragick Exploit & Fix

    ImageMagick是一款广泛流行的图像处理软件,有无数的网站(国内国外都有)使用它来进行图像处理,本周二,ImageMagick披露出了一个严重的0day漏洞,此漏洞允许攻击者通过上传恶意构造的图 ...

  8. Python之路【第五篇续】:面向对象编程二

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABgQAAALaCAIAAABxja8cAAAgAElEQVR4nOzd6X9Tdd74/+uv+f5uzF

  9. asp.net mvc中在使用async的时候HttpContext为null的问题

    摘要 HttpContext上下文并不是无处不在的.详情可以看下Fish Li的文章,解释的比较清楚. HttpContext.Current并非无处不在 问题复现 public async Task ...

  10. fedora14 安装中文输入法

    We trust you have received the usual lecture (n. 演讲 讲课 讲座; 教训 训斥 告诫) from the local SystemAdministra ...