51nod 最长公共子序列测试 【LCS+回溯】
第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+回溯】相关推荐
- 最长公共子序列问题LCS
最长公共子序列问题LCS 问题描写叙述: 一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说.若给定序列X= { x1, x2,-, xm},则还有一序列Z= {z1, z2,-, z ...
- 最长公共子序列(LCS)C++版递归算法实现
最长公共子序列(LCS)递归算法实现 文章目录 一.最长公共子序列问题 二.解题思路 三.代码实现 C++ 四.复杂度分析 总结 一.最长公共子序列问题 描述:给定两个字符串 text1 和 text ...
- java lcs_Java算法之最长公共子序列问题(LCS)实例分析
本文实例讲述了Java算法之最长公共子序列问题(LCS).分享给大家供大家参考,具体如下: 问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X= { x1, x ...
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...
- 动态规划——最长公共子序列(LCS)
最长公共子序列的问题描述为: 下面介绍动态规划的做法. 令 dp[i][j] 表示字符串 A 的 i 号位与字符串 B 的 j 号位之前的 LCS 长度(下标从 1 开始),如 dp[4][5] 表示 ...
- Java动态规划求最长公共子序列(LCS)
最长公共子序列(LCS) 定义:在序列X和序列Y中同时出现的元素,按照脚标从小到大排列的这样的序列. String x = "ABCBDABGGGTT"; ...
- 最长公共子序列问题——LCS算法
最长公共子序列问题--LCS算法 问题描述: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).比如两个串为:abcicba abdkscabab是两个串的子序列,abc也是,a ...
- 【算法】最长公共子序列(LCS)
1. 概述 题目描述:给定两个字符串(或数字序列)A和B,求一个字符串,使得这个字符串是A和B的最长公共部分(子序列可以是补连续的) 例如:"sadstory" 和 "a ...
- 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...
问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...
最新文章
- Ubuntu下修改DNS重启也能用的方法
- android判断耳机
- python中requests库的用途-数据爬虫(三):python中requests库使用方法详解
- 异常处理汇总-开发工具
- Ardino基础教程 1_让Arduino说出HelloWorld
- 欧拉函数/欧拉函数打表 lightoj1370(java/c++ )
- IO 延迟与Queue Depth
- Css3系列-新属性新布局
- 杜教筛--51nod1239 欧拉函数之和
- 一个上帝视角的java游戏_从上帝视角看Java如何运行
- (四)Linux 安装 jdk
- Thinking with Joins
- 基于Nodejs的前端灰度发布方案_20190228
- 【CNN长文详解】大话卷积神经网络CNN(干货满满)
- 基于FPGA的数字频率计Verilog开发
- [BZOJ1163][Baltic2008]Mafia
- matlab 求公切线方程,【原创】绘制两圆公切线MATLAB代码
- 利用Anaconda Prompt在Jupter notebook中安装包
- 笔记本硬盘重装系统后只有一个盘的数据恢复方法
- 快速傅里叶和离散傅里叶的区别?