hdu1503(最长公共子序列)
题目链接: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(最长公共子序列)的更多相关文章
- hdu1503 最长公共子序列变形
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1503 题意:给出两个字符串 要求输出包含两个字符串的所有字母的最短序列.注意输出的顺序不能 ...
- 最长公共子序列hdu1503
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意:给你两个字符串,把这两个字符串合并,使合并之后的字符串最短,并且合并之后的字符之间的相对位 ...
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- [Data Structure] LCSs——最长公共子序列和最长公共子串
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- LintCode 77: 最长公共子序列
public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common s ...
- 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题
先要搞明白:最长公共子串和最长公共子序列的区别. 最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...
- LCS(Longest Common Subsequence 最长公共子序列)
最长公共子序列 英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...
- 准备NOIP2017 最长公共子序列(模版)
一些概念: (1)子序列: 一个序列A = a1,a2,--an,中任意删除若干项,剩余的序列叫做A的一个子序列.也可以认为是从序列A按原顺序保留任意若干项得到的序列.例如: 对序列 1,3,5, ...
随机推荐
- MSSQL - 逻辑主键、业务主键和复合主键
转载自:http://blog.csdn.net/sunrise918/article/details/5575054 这几天对逻辑主键.业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论 ...
- 【linux】开发环境说明
欢迎转载,转载时请保留作者信息,谢谢. 邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:http:// ...
- jquery 提交数据
目录 jquery ajax的应用 1 表单提交 2 ajax的提交(ajax post get) 普通的表单提交 <%@ page language="java" impo ...
- hdu 1540 Tunnel Warfare(线段树区间统计)
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- accumulate
accumulate?就是sum up a range of elements.呵呵.这个挺简单的.以下是这个算法的简单介绍: Syntax: #include <numeric>//呵呵 ...
- leetcode先刷_Path Sum
水的问题不解释,具有参数保持部和,当它到达一个叶子节点,推断是否与给予平等. 需要注意的是节点在树中的数目值它可以是正的或负.它不使用,修剪.有仅仅存在罐.因此,关于或代表最终结果的字. bool h ...
- Ubuntu_文件夹名字转化成英文
打开终端命令行输入: export LANG=en_US xdg-user-dirs-gtk-update 之后重启,就看到中文的文件夹变成英文的了 想要换回中文的输入: export LANG=zh ...
- 开源力量公开课第三十期- 跟我一起玩转OpenStack
开源力量公开课第三十期- 跟我一起玩转OpenStack 开课时间:2013年9月10日 18:30 - 21:30 形式:现场(北京3W咖啡) + 线上直播, 免费报名:http://www.o ...
- ie 64bit调用activex控件
1,首先,这是可能的.不要被网上一堆ie64调不了activex控件的文章误导了.flash就是一个现成的例子,flash支持ie64. 2,ie64只能调用64bit的activex控件.网上那些说 ...
- QT解析命令行(QCommandLineOption和QCommandLineParser类)
Qt从5.2版开始提供了两个类QCommandLineOption和QCommandLineParser来解析应用的命令行参数. 一.命令行写法命令行:"-abc" 在QComma ...