题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503

题意:由两个字符串构造出另一个字符串,该字符串包含前两个字符串(按字符顺序,但不一定连续),使该字符串长度最小

分析:dp[i][j]表示s1[0-i]与s2[0-j]的最长公共子串.用数字flag随便记录路径然后回溯输出答案即可。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 10010
using namespace std;
char s1[],s2[];
int dp[][],flag[][];
void print(int x,int y)
{
if(x==&&y==)return;
if(flag[x][y]==)
{
print(x-,y-);
printf("%c",s1[x-]);
}
else if(flag[x][y]==)
{
print(x,y-);
printf("%c",s2[y-]);
}
else
{
print(x-,y);
printf("%c",s1[x-]);
}
}
int main()
{
while(scanf("%s%s",s1,s2)>)
{
int len1=strlen(s1);
int len2=strlen(s2);
memset(dp,,sizeof(dp));
for(int i=;i<=len1;i++)flag[i][]=-;;//这个时刻s1[i]要单独输
for(int i=;i<=len2;i++)flag[][i]=;;//这个时刻s2[i]要单独输
for(int i=;i<=len1;i++)
for(int j=;j<=len2;j++)
{
if(s1[i-]==s2[j-])
{
dp[i][j]=dp[i-][j-]+;
flag[i][j]=;//表示这个时刻属公共部分
}
else if(dp[i][j-]<dp[i-][j])
{
dp[i][j]=dp[i-][j];
flag[i][j]=-;//这个时刻s1[i-1]要单独输
}
else
{
dp[i][j]=dp[i][j-];
flag[i][j]=;//这个时刻s2[j-1]要单独输
}
}
print(len1,len2);puts("");
}
}

hdu1503(最长公共子序列)的更多相关文章

  1. hdu1503 最长公共子序列变形

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1503 题意:给出两个字符串 要求输出包含两个字符串的所有字母的最短序列.注意输出的顺序不能 ...

  2. 最长公共子序列hdu1503

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意:给你两个字符串,把这两个字符串合并,使合并之后的字符串最短,并且合并之后的字符之间的相对位 ...

  3. 用python实现最长公共子序列算法(找到所有最长公共子串)

    软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...

  4. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

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

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

  6. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  7. LintCode 77: 最长公共子序列

    public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common s ...

  8. 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题

    先要搞明白:最长公共子串和最长公共子序列的区别.    最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...

  9. LCS(Longest Common Subsequence 最长公共子序列)

    最长公共子序列 英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...

  10. 准备NOIP2017 最长公共子序列(模版)

    一些概念: (1)子序列: 一个序列A = a1,a2,--an,中任意删除若干项,剩余的序列叫做A的一个子序列.也可以认为是从序列A按原顺序保留任意若干项得到的序列.例如:   对序列 1,3,5, ...

随机推荐

  1. C++学习之路—继承与派生(四)拓展与总结

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 1    拓展部分 本节主要由两部分内容组成,分 ...

  2. ASP.NET - 使用 Eval() 绑定数据时使用 三元运算符

    ASP.NET邦定数据“<%#Eval("Sex")%>”运用三元运算符: <%#(Eval("Sex", "{0}") ...

  3. 好多NFS的文章

    http://www.cnblogs.com/lidabo/category/587288.html http://www.cnblogs.com/lidabo/p/4380555.html

  4. Delphi 能不能从Ring 3进入Ring 0

    我发现了一篇发表在1999.11.29   b13版的     <令win32应用程序跳入系统层>东南大学   卢威   luwei@126.com     是用vc++嵌汇编做的,    ...

  5. html适配Anroid手机

    本文全然是翻译与总结谷歌官方的教程,已确保文档的正确性. 免得大家被五花八门的其它的资料弄混了,也没有系统行的学习. 一.设置窗体尺寸和适配屏幕分辨率 谷歌官方文档提到两个大的方面. 1.Viewpo ...

  6. Atitit.软件仪表盘(2)--vm子系统--资源占用监測

    Atitit.软件仪表盘(2)--vm子系统--资源占用监測 1.  Jvisualvm.exe 2. jprofile 3. Heap //permgen   monitor 作者::老哇的爪子At ...

  7. WTL介绍

    WTL简单介绍 关键词: WTL WTL是一个好东东.它开发的程序都很短小精悍.对开发WIN32的应用有很好的优点.它不用MFC开发.但可以高速产生窗体和控件. 以文本方式查看主题 -  温馨小筑   ...

  8. Android应用开发之(通过ClipboardManager, ClipData进行复制粘贴)

    在开发一些系统应用的时候,我们会用到Android的剪贴板功能,比如将文本文件.或者其他格式的内容复制到剪贴板或者从剪贴板获取数据等操作.Android平台中每个常规的应用运行在自己的进程空间中,相对 ...

  9. Java_io体系之BufferedWriter、BufferedReader简介、走进源码及示例——16

    Java_io体系之BufferedWriter.BufferedReader简介.走进源码及示例——16 一:BufferedWriter 1.类功能简介: BufferedWriter.缓存字符输 ...

  10. windows线程同步的总结

    一 线程 1)如果你正在编写C/C++代码,决不应该调用CreateThread.相反,应该使用VisualC++运行期库函数_beginthreadex,退出也应该使用_endthreadex.如果 ...