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=& ...
最新文章
- Jquery Uploadify3.21.与2.1版本 使用中存在的问题--记录三
- Verilog系统函数(一) $display
- 监控利器Prometheus初探
- [转]Cocos2d-x观察者模式
- 云炬随笔20180607
- 内联函数声明与实现分为两个文件导致编译出错问题
- mp3 pcm java_Java mp3文件转pcm文件
- 整合弹簧,速度和瓷砖
- php发扑克牌,php 扑克牌代码的简单例子
- linux内核分成如下五个子系统,linux内核主要由5个子系统 Linux内核由哪几个子系统组成?...
- http的get与post方式下的getParameter获取中文
- Android笔记 Android艺术探索笔记 Pacel VS Serialize Demo
- 计算机应用类专业综合知识模拟试题,2015年湖南省对口升学计算机应用类专业综合知识试题(真题)...
- 架构模式: 服务器端页面碎片化元素构建
- Minor GC和Major GC
- linux复制文件中内容吗,Linux中实现对文件内容的复制。。。
- 关于推荐系统中的特征工程
- 主板定制X86嵌入式器件选型
- 学习python: 单例设计模式
- Java集合---HashMap源码剖析
热门文章
- Silverlight网站服务器端的配置
- Vivado安装器件不全
- 服务器虚拟化组网方案,服务器虚拟化部署方案计划.doc
- python request file upload_Python基于requests实现模拟上传文件
- 带你玩玩转 MySQL 查询
- mysql开发规范最新版本_MYSQL 开发规范
- HDU1392(凸包求周长模版)
- szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告
- python用海伦公式求面积_用带参数的宏定义,通过海伦公式求三角形的面积
- 学习python一开始枯燥_编程零基础应当怎样开始学python?他说,看这三个经典方法...