最长共公子序列(LCS)
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
char str1[], str2[];
int f[][];//记录状态
//动态规划是一种记忆化搜索
/*有俩个字符串,求出他们的最长公共子序列
,例如:
acdtfs
aldtks
最长公共子序列是adts,长度为4
n,m
string1(length = n)
string2(length = m)
f[i][j]表示1串第i个与第二个串第j个匹配得到
的子序列最大长度
f[i][j] = max(f[i - 1][j], f[i][j - 1]);
f[i - 1][j - 1] + 1;
*/
int main(){
int i, j, k;
int n, m;
scanf("%d%d",&n,&m);
scanf("%s%s",str1 + , str2 + );
f[][] = ;
for(int i = ; i <= n; i++){
for(int j = ; j <= m; j++){
if(str1[i] == str2[j]){
f[i][j] = f[i - ][j - ] + ;
}
f[i][j]=max(f[i][j], f[i-][j]);
f[i][j]=max(f[i][j], f[i][j-]);
}
}
printf("%d\n", f[n][m]);
return ;
}
#include <iostream>
using namespace std;
/*有一串数,求出它的最大不下降子序列的
长度(等于也包括)
如1, 2, 5, 3, 6, 2, 9, 10
答案是
1 2 3 6 9 10(这只是其中之一)
f[i]表示子序列包括数字i的时候,最长不下降子序列的长度
f[i] = max(f[j] + 1) a[i] > a[j];
ans = max(f[i])
*/
int a[];
int f[];
int memory[];//记录状态
int main(){
int i, j, k;
int n;
scanf("%d", &n);//数串的长度
for(i = ; i <= n; i++){
scanf("%d", &a[i]);
}
int temp;
f[] = ;//第一个为1
for(i = ; i <= n; i++){
f[i] = ;
for(j = ; j <= i - ; j++){
if(a[i] > a[j]){//如果后面的数字更大
if(f[i] < f[j] + ){//如果后面数字的最长子序列长度小于前面最长子序列长度 + 1
f[i] = f[j] + ;//更新此时的最长子序列长度
memory[i] = j;//记录i位置的前一个位置
}
}
}
}
int ans = , mark;//mark用来取得记录最大不下降子序列的下标,ans用来记录大子序列的值
for(i = ; i <= n; i++){
if(ans < f[i]){
mark = i;
ans = f[i];
}
}
temp = mark;
//倒序输出记录状态 (这里可以利用一个栈顺序输出)
while(temp > ){
printf("%d ", a[temp]);
temp = memory[temp];
}
printf("\n%d\n", ans);
return ;
}
最长公共子序列的优秀博文:https://blog.csdn.net/someone_and_anyone/article/details/81044153
最长共公子序列(LCS)的更多相关文章
- [vijosP1303]导弹拦截(最长上升子序列转LCS)
描述 某国为了防御敌国的导弹袭击,研发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭 ...
- 动态规划法(十)最长公共子序列(LCS)问题
问题介绍 给定一个序列\(X=<x_1,x_2,....,x_m>\),另一个序列\(Z=<z_1,z_2,....,z_k>\)满足如下条件时称为X的子序列:存在一个严格 ...
- python 回溯法 子集树模板 系列 —— 14、最长公共子序列(LCS)
问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 belong cnblogs 输出示例 blog ...
- [CTSC2017]最长上升自序列(伪题解)(Dilworth's theorem+网络流)
部分分做法很多,但每想出来一个也就多5-10分.正解还不会,下面是各种部分分做法: Subtask 1:k=1 LCS长度最长为1,也就是说不存在j>i和a[j]>a[i]同时成立.显然就 ...
- Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)
一.Description A palindrome is a symmetrical string, that is, a string read identically from left to ...
- 算法复习——求最长不下降序列长度(dp算法)
题目: 题目背景 161114-练习-DAY1-AHSDFZ T2 题目描述 有 N 辆列车,标记为 1,2,3,…,N.它们按照一定的次序进站,站台共有 K 个轨道,轨道遵从先进先出的原则.列车进入 ...
- 【Luogu P1439】最长公共子序列(LCS)
Luogu P1439 令f[i][j]表示a的前i个元素与b的前j个元素的最长公共子序列 可以得到状态转移方程: if (a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; d ...
- 程序员的算法课(6)-最长公共子序列(LCS)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- 最长公共子序列(LCS)、最长递增子序列(LIS)、最长递增公共子序列(LICS)
最长公共子序列(LCS) [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
随机推荐
- 安装php的lavavel框架的流程(亲测)
windows上安装配置laravel 初次接触laravel会觉得它的安装方式比较不一样,与Linux上安装软件的方式很相似. 学习laravel的最好方式当然是看官方文档,笔者就在这里讲官方文档上 ...
- python并发编程之IO阻塞基础知识点
IO模型 解决IO问题的方式方法 问题是:IO操作阻塞程序执行 解决的也仅仅是网络IO操作 一般数据传输经历的两个阶段,如图: IO阻塞模型分类: 阻塞IO 非阻塞IO 多路复用IO 异步IO(爬 ...
- App自动化(1)--Appium-Android环境搭建
本次笔记记录Appium-Android环境搭建,主要实现在windows上通过python编写脚本来实现模拟器上安装的app自动化测试. 主要步骤:安装node.js,配置JDK环境,配置Andro ...
- Floyed-Warshall【弗洛伊德算法】
首先介绍一下有关最短路径的知识 从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径.解决最短路的问题有以下算法,Dijkstra算法,Bellman-Ford算 ...
- 【caffe】caffe在linux环境下的安装与编译
网上的caffe的安装教程繁杂而散乱,对初学者很不友好,尤其对该框架理解不深的童鞋.总的来说,caffe的安装不外乎几个固定的步骤,对每一步有了一定的理解,安装只是time-consuming的问题! ...
- Java中interrupt的使用
通常我们会有这样的需求,即停止一个线程.在java的api中有stop.suspend等方法可以达到目的,但由于这些方法在使用上存在不安全性,会带来不好的副作用,不建议被使用.具体原因可以参考Why ...
- [图解Java]读写锁ReentrantReadWriteLock
图解ReentrantReadWriteLock 如果之前使用过读写锁, 那么可以直接看本篇文章. 如果之前未使用过, 那么请配合我的另一篇文章一起看:[源码分析]读写锁ReentrantReadWr ...
- 使用numpy的小惊喜
今天使用 numpy.true_divide 发现个有趣的事情, 下面的代码18.19行如果去掉,就会报下面的 RuntimeWarning def multivalue_divide(timese ...
- JGUI源码:实现简单进度条(19)
程序效果如下 实现进度条动画主要有两种方法:(1)使用缓动,(2)使用Jquery Animate,本文使用第二种方法,先实现代码,后续进行控件封装 <style> .jgui-proce ...
- Hyper-V安装虚拟机
1.进入控制面板-程序,选择“启用或关闭Windows功能” 2.找到Hyper-V,勾选,重启电脑,即可 3.若是没有找到Hyper-V,如此操作 1)新建txt文件,输入以下内容: pushd & ...