输入
第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. Ubuntu下修改DNS重启也能用的方法
  2. android判断耳机
  3. python中requests库的用途-数据爬虫(三):python中requests库使用方法详解
  4. 异常处理汇总-开发工具
  5. Ardino基础教程 1_让Arduino说出HelloWorld
  6. 欧拉函数/欧拉函数打表 lightoj1370(java/c++ )
  7. IO 延迟与Queue Depth
  8. Css3系列-新属性新布局
  9. 杜教筛--51nod1239 欧拉函数之和
  10. 一个上帝视角的java游戏_从上帝视角看Java如何运行
  11. (四)Linux 安装 jdk
  12. Thinking with Joins
  13. 基于Nodejs的前端灰度发布方案_20190228
  14. 【CNN长文详解】大话卷积神经网络CNN(干货满满)
  15. 基于FPGA的数字频率计Verilog开发
  16. [BZOJ1163][Baltic2008]Mafia
  17. matlab 求公切线方程,【原创】绘制两圆公切线MATLAB代码
  18. 利用Anaconda Prompt在Jupter notebook中安装包
  19. 笔记本硬盘重装系统后只有一个盘的数据恢复方法
  20. 快速傅里叶和离散傅里叶的区别?

热门文章

  1. ipv6的rip配置
  2. 论网络营销在我国的发展
  3. oracle 查询数据横向,Oracle 查询存储过程做横向报表的方法
  4. 0x00000000指令引用的内存不能为written_jvm的内存结构
  5. Python初学者必学的20个重要技巧
  6. 对我而言Linux究竟有什么魅力
  7. JSP笔记-点击量统计
  8. Linux drm显示系统的两种方案
  9. centeros7网络服务无法启动_Linux网络服务02——DHCP原理与配置
  10. SQLAlchemy实现插入数据(使用前端页面)