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

这道题又WA了好几次

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

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

WA点有几个都被我遇到了

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

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

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

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<stack>
#include<cstring>
using namespace std;
struct donser
{
int x,y;
};
int main()
{
string s,t;
while(cin>>s>>t)
{
int i,j,m=,n=,a1,b1,a2,b2;
stack<donser> sta;
struct donser dong;
struct donser dongs;
int dp[][],lable[][];
n=s.length();
m=t.length();
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
if(s[i]==t[j])
{
dp[i+][j+]=dp[i][j]+;
lable[i+][j+]=;
}
else
{
if(dp[i][j+]>dp[i+][j])
{
dp[i+][j+]=dp[i][j+];
lable[i+][j+]=;
}
else
{
dp[i+][j+]=dp[i+][j];
lable[i+][j+]=;
}
}
}
}
i=n;j=m;a1=a2=n;b1=b2=m;
if(dp[n][m]==){cout<<s<<t<<endl;}
else{
while(lable[i][j]!=)
{
if(lable[i][j]==)
{
i--;j--;
dong.x=i;
dong.y=j;
sta.push(dong);
}
else if(lable[i][j]==)
{
i--;
}
else if(lable[i][j]==)
{
j--;
}
}
if(sta.empty()!=)
{
dong=sta.top();
sta.pop();
a1=dong.x;
b1=dong.y;
for(i=;i<a1;i++)
{
cout<<s[i];
}
for(i=;i<b1;i++)
{
cout<<t[i];
}
}
if(sta.empty()==)
{
for(i=a1;i<n;i++)
{
cout<<s[i];
}
for(i=b1+;i<m;i++)
{
cout<<t[i];
}
}
while(sta.empty()!=)
{
a1=dong.x;
b1=dong.y;
dongs=sta.top();
sta.pop();
a2=dongs.x;
b2=dongs.y;
for(i=a1;i<a2;i++)
{
cout<<s[i];
}
for(j=b1+;j<b2;j++)
{
cout<<t[j];
}
dong=dongs;
}
for(i=a2;i<n;i++)
{
cout<<s[i];
}
for(i=b2+;i<m;i++)
{
cout<<t[i];
}
cout<<endl;}
}
return ;
}

最新文章

  1. ISPA
  2. 【问题】js 改变鼠标样式,chrome浏览器不能立即更新,暂没有解决办法
  3. qq邮箱过滤器 + Foxmail(IMAP)
  4. 【Beta】第二次任务发布
  5. work flow
  6. 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
  7. 解读ClassLoader
  8. Window下SVN命令的使用总结
  9. GroupId和ArtifactId
  10. Boost使用笔记(Smart_ptr)
  11. 用FusionChartsFree做饼状图、柱状图、折线图的实例
  12. 解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题
  13. Javascript中几个看起来简单,却不一定会做的题
  14. vue全家桶安装以及修改webpack配置新增vue项目启动方式
  15. (一)Knockout 计算属性
  16. 《Whitelabel Error Page 404》 对于Springboot初学者可能出现问题的原因
  17. MYSQL服务器系统变量
  18. what&#39;s the 跨期套利
  19. Vue设置页面的title
  20. ZOJ 3955 Saddle Point

热门文章

  1. JavaScript学习笔记——BOM_window对象
  2. C++中public,protected,private派生类继承问题和访问权限问题
  3. ecshop Admin后台删除(Ajxa删除,无跳转连接)
  4. Helixoft VSdocman 是一个集成于Visual Studio并提供了命令行版本的帮助文档编译工具
  5. Nginx + FastCGI 程序(C/C++) 搭建高性能web service的Demo及部署发布
  6. PHP数组处理函数的使用array_map(三)
  7. TextBox 英文文档
  8. CocoaLumberjack
  9. addEventListener和on的区别
  10. linux的多媒体 播放 软件版权问题