给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。

比如两个串为:

abcicba

abdkscab

ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。

收起

输入

第1行:字符串A
第2行:字符串B
(A,B的长度 <= 1000)

输出

输出最长的子序列,如果有多个,随意输出1个。

输入样例

abcicba
abdkscab

输出样例

abca

思路就是先求最长公共子序列,然后再根据路径逆推,找到匹配点。

#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<bitset>
#include<cstdio>
#include<cstring>
//---------------------------------Sexy operation--------------------------//#define cini(n) scanf("%d",&n)
#define cinl(n) scanf("%lld",&n)
#define cinc(n) scanf("%c",&n)
#define cins(s) scanf("%s",s)
#define coui(n) printf("%d",n)
#define couc(n) printf("%c",n)
#define coul(n) printf("%lld",n)
#define speed ios_base::sync_with_stdio(0)
#define file  freopen("input.txt","r",stdin);freopen("output.txt","w",stdout)
//-------------------------------Actual option------------------------------//#define Swap(a,b) a^=b^=a^=b
#define Max(a,b) a>b?a:b
#define Min(a,b) a<b?a:b
#define mem(n,x) memset(n,x,sizeof(n))
#define mp(a,b) make_pair(a,b)
//--------------------------------constant----------------------------------//#define INF  0x3f3f3f3f
#define maxn  1005
#define esp  1e-9
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
//------------------------------Dividing Line--------------------------------//
string a,b,ans;
int dp[maxn][maxn];
int main()
{ans.clear();cin>>a>>b;a=' '+a;b=' '+b;int la=a.size();int lb=b.size();for(int i=1;i<la;i++){for(int j=1;j<lb;j++){if(a[i]==b[j])dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}int m=la-1,n=lb-1;while(dp[m][n]){if(dp[m][n]==dp[m-1][n]) m--;else if(dp[m][n-1]==dp[m][n]) n--;else{if(a[m]!=' ')ans=a[m]+ans;m--,n--;}}cout<<ans<<endl;
}

51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子相关推荐

  1. 【51NOD】1006 最长公共子序列Lcs(动态规划)

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...

  2. 51nod题解 1006 最长公共子序列LCS

    题目 #include<iostream> #include<cstring> #include<cstdio> using namespace std;char ...

  3. [Leetcode][第1143题][JAVA][最长公共子序列][LCS][动态规划]

    [问题描述][中等] [解答思路] 时间复杂度:O(N^2) 空间复杂度:O(N^2) class Solution {public int longestCommonSubsequence(Stri ...

  4. 51 nod 1006 最长公共子序列Lcs

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006 参考博客 :http://blog.csdn.net/yysdsy ...

  5. 动态规划算法解最长公共子序列LCS问题

    动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...

  6. 最长公共子序列php,动态规划(最长公共子序列LCS)

    概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...

  7. 算法导论-----最长公共子序列LCS(动态规划)

    目录 一.概念梳理 二.最长公共子序列解决方案 方案1:蛮力搜索策略 方案2:动态规划策略 三.C代码实现 实现1 实现2(空间优化) 一.概念梳理   1. 子序列(subsequence): 一个 ...

  8. 动态规划表格法解决最长公共子序列(LCS)问题

    3.5 最长公共子序列(LCS) 前言:图片是博主自己画的,转载请注明出处哦 3.5.1 问题描述 最长公共子序列(Longest Common Subseuence,LCS)问题:给定两个字符串,求 ...

  9. 动态规划解最长公共子序列(LCS)(附详细填表过程)

    目录 相关概念 子序列形式化定义: 公共子序列定义: 最长公共子序列(以下简称LCS): 方法 蛮力法求解最长公共子序列: 动态规划求解最长公共子序列: 分析规律: 做法: 伪代码: 下面演示下c数组 ...

最新文章

  1. 036_Unicode对照表二
  2. 【Android】Activity和PopupWindow都实现从底部弹出或滑出选择菜单或窗口
  3. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]
  4. Java IO: InputStream
  5. python3获取当前日期_如何在python3中获取当前日期和时间? – Python3教程
  6. java 构建 数字 list_数字全排列返回list的list:java实现
  7. react diff算法剖析总结
  8. DelphiWebMVC框架实现对Redis支持
  9. M3U8下载,直播源下载,FLASH下载(二)-ffmpeg安装手册(linux)
  10. 美洽客服JavaScript 网页插件
  11. Exploring and Distilling Posterior and Prior Knowledge for Radiology Report Generation
  12. AndroidStudio高德地图获取key
  13. Unity的C#编程教程_17_Variables 挑战 3 折扣计算器
  14. 现代天线设计——学习笔记(一)
  15. 【JavaScript】实现移动小精灵
  16. 竹云+巨杉丨互信认证 安全可靠
  17. python turtle方向_Python turtle.left()用法及代码示例
  18. Spring 体系版本对应关系
  19. 高通Android9设置双屏同显示
  20. 睢宁微服务平台下载_掌上睢宁app下载-掌上睢宁官方版下载v1.0-飞飞世界

热门文章

  1. 计算机对农业领域带来的变革,智慧农业将给农业带来哪些变化?
  2. java jdbc修改_java----jdbc(数据库的添加,删除,修改,更新)
  3. xlim用法matlab,MATLAB之xlim 、 ylim 、zlim的简单介绍
  4. java oauth server_Spring OAuth2 ResourceServer外部AuthorizationServer
  5. 实现 VUE 中 MVVM - step10 - Computed
  6. Jmeter中使用循环如何保证数据不重复
  7. 《并行计算的编程模型》一1.4 数据类型
  8. 《C语言深度解剖》学习笔记之符号
  9. 【matlab-7】Matlab与线性代数(三)
  10. 计算机服务管理器延迟启动项,开机延时启动程序