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

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

输入示例
abcicba
abdkscab


输出示例
abca

这道题比较6,但是利用每个位置的记录进行回溯就更6,好好体会下。

#include <map>
#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <iostream>
#include <stack>
#include <cmath>
#include <string>
#include <vector>
#include <cstdlib>
//#include <bits/stdc++.h>
//#define LOACL
#define space " "
using namespace std;
//typedef long long Long;
//typedef __int64 Int;
typedef pair<int, int> paii;
const int INF = 0x3f3f3f3f;
const double ESP = 1e-6;
const double PI = acos(-1.0);
const int MOD = 1e9 + 7;
const int MAXN = 1000 + 5;
char str1[MAXN], str2[MAXN];
int dp[MAXN][MAXN], vis[MAXN][MAXN];
void print(int x, int y) {if (x == 0 || y == 0) return;if (vis[x][y] == 1) {print(x - 1, y - 1);printf("%c", str1[x - 1]);}else if (vis[x][y] == 2) {print(x - 1, y);}else {print(x, y - 1);}
}
int main() {while (scanf("%s%s", &str1, &str2) != EOF) {int cnt = 0, t = 0;int len1 = strlen(str1);int len2 = strlen(str2);memset(dp, 0, sizeof(dp));memset(vis, 0, sizeof(vis));for (int i = 1;i <= len1; i++) {for (int j = 1; j <= len2; j++) {if (str1[i - 1] == str2[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;vis[i][j] = 1;}else if (dp[i - 1][j] > dp[i][j - 1]){dp[i][j] = dp[i - 1][j];vis[i][j] = 2;}else {dp[i][j] = dp[i][j - 1];vis[i][j] = 3;}}}print(len1, len2); printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/cniwoq/p/6770799.html

51nod 最长公共子序列测试 【LCS+回溯】相关推荐

  1. 最长公共子序列问题LCS

    最长公共子序列问题LCS 问题描写叙述: 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说.若给定序列X= { x1, x2,-, xm},则还有一序列Z= {z1, z2,-, z ...

  2. 最长公共子序列(LCS)C++版递归算法实现

    最长公共子序列(LCS)递归算法实现 文章目录 一.最长公共子序列问题 二.解题思路 三.代码实现 C++ 四.复杂度分析 总结 一.最长公共子序列问题 描述:给定两个字符串 text1 和 text ...

  3. java lcs_Java算法之最长公共子序列问题(LCS)实例分析

    本文实例讲述了Java算法之最长公共子序列问题(LCS).分享给大家供大家参考,具体如下: 问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X= { x1, x ...

  4. 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)

    目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...

  5. 动态规划——最长公共子序列(LCS)

    最长公共子序列的问题描述为: 下面介绍动态规划的做法. 令 dp[i][j] 表示字符串 A 的 i 号位与字符串 B 的 j 号位之前的 LCS 长度(下标从 1 开始),如 dp[4][5] 表示 ...

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

    最长公共子序列(LCS) 定义:在序列X和序列Y中同时出现的元素,按照脚标从小到大排列的这样的序列.         String x = "ABCBDABGGGTT";      ...

  7. 最长公共子序列问题——LCS算法

    最长公共子序列问题--LCS算法 问题描述: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).比如两个串为:abcicba abdkscabab是两个串的子序列,abc也是,a ...

  8. 【算法】最长公共子序列(LCS)

    1. 概述 题目描述:给定两个字符串(或数字序列)A和B,求一个字符串,使得这个字符串是A和B的最长公共部分(子序列可以是补连续的) 例如:"sadstory" 和 "a ...

  9. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

最新文章

  1. Jquery Uploadify3.21.与2.1版本 使用中存在的问题--记录三
  2. Verilog系统函数(一) $display
  3. 监控利器Prometheus初探
  4. [转]Cocos2d-x观察者模式
  5. 云炬随笔20180607
  6. 内联函数声明与实现分为两个文件导致编译出错问题
  7. mp3 pcm java_Java mp3文件转pcm文件
  8. 整合弹簧,速度和瓷砖
  9. php发扑克牌,php 扑克牌代码的简单例子
  10. linux内核分成如下五个子系统,linux内核主要由5个子系统 Linux内核由哪几个子系统组成?...
  11. http的get与post方式下的getParameter获取中文
  12. Android笔记 Android艺术探索笔记 Pacel VS Serialize Demo
  13. 计算机应用类专业综合知识模拟试题,2015年湖南省对口升学计算机应用类专业综合知识试题(真题)...
  14. 架构模式: 服务器端页面碎片化元素构建
  15. Minor GC和Major GC
  16. linux复制文件中内容吗,Linux中实现对文件内容的复制。。。
  17. 关于推荐系统中的特征工程
  18. 主板定制X86嵌入式器件选型
  19. 学习python: 单例设计模式
  20. Java集合---HashMap源码剖析

热门文章

  1. Silverlight网站服务器端的配置
  2. Vivado安装器件不全
  3. 服务器虚拟化组网方案,服务器虚拟化部署方案计划.doc
  4. python request file upload_Python基于requests实现模拟上传文件
  5. 带你玩玩转 MySQL 查询
  6. mysql开发规范最新版本_MYSQL 开发规范
  7. HDU1392(凸包求周长模版)
  8. szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告
  9. python用海伦公式求面积_用带参数的宏定义,通过海伦公式求三角形的面积
  10. 学习python一开始枯燥_编程零基础应当怎样开始学python?他说,看这三个经典方法...