最长公共子序列

题目链接 P1439
LIS(Longest Increasing Subsequence)(最长递增子序列)
LCS(Longest Common Subsequence)(最长公共子序列)

简朴的DP

点击查看代码

#include<iostream>
using namespace std;
const int N=1010;
int n;
int a[N],b[N];
int f[N][N];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i="1;i<=n;i++)scanf("%d",&b[i]);" { j="1;j<=n;j++)" f[i][j]="max(f[i-1][j],f[i][j-1]);" if(a[i]="=b[j])" } cout<<f[n][n]<<endl; return 0; < code></=n;i++)scanf("%d",&a[i]);></iostream>

离散化

题中所说每个序列是1-N的一个排列,所以可以知道,P1和P2两个序列 元素相同,排列不同

那么我就可以利用离散化(叫映射更合理一点?),将P1中的元素(记为a1,a2,a3……an)映射为(1,2,3,……,n)。

很明显,这是一个严格单调递增符合题条件的序列。

利用同样的映射关系,把P2序列也转化一下,将转化后的序列记为(b1,b2,b3……bn)。

因为P1严格单调递增,那么,求映射后的P1,P2的LCS,不就是求P2的LIS嘛?

栈的使用

求一个序列的LIS,也可以DP,但因为时间复杂度也是n的平方,所以我们使用二分。

利用一个单调递增的栈,不断更新栈中序列,最后留下的序列的大小就是原序列LIS的大小。但是,留下的序列 不是LIS。

栈中序列虽然递增,但是每个元素在原串中对应的位置其实可能是乱的,那为什么这个栈还能用于计算最长子序列长度?

实际上这个栈不用于记录最终的最长子序列,而是以stk[i]结尾的子串长度最长为i或者说长度为i的递增子串中,末尾元素最小的是stk[i]。

理解了这个问题以后就知道为什么新进来的元素要不就在末尾增加,要不就 替代第一个大于等于它元素的位置(lower_bound函数的作用)

这里的 替换就蕴含了一个贪心的思想,对于同样长度的子串,我当然希望它的末端越小越好,这样以后我也有更多机会拓展

最终代码

点击查看代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

const int N=100010;
int map[N],a[N],b[N];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) { scanf("%d",&a[i]); map[a[i]]="i;" } for(int i="1;i<=n;i++)" scanf("%d",&b[i]); b[i]="map[b[i]];" vector<int>stk;

    stk.push_back(b[1]);

    for(int i=2;i<=n;i++) { if(b[i]>stk.back())
        {
            stk.push_back(b[i]);
        }else
        {
            *lower_bound(stk.begin(),stk.end(),b[i])=b[i];
        }
    }
    cout<<stk.size()<<endl; return 0; } < code></stk.size()<<endl;></=n;i++)></=n;i++)></algorithm></vector></iostream>

Original: https://www.cnblogs.com/Az1r/p/16667606.html
Author: 江水为竭
Title: 最长公共子序列

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/686294/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 字符串

    20、【剑指Offer学习】【面试题20:表示数值的字符串】 38、【剑指Offer学习】【面试题38:字符串的排列】 46、【剑指Offer学习】【面试题46:把数字翻译成字符串…

    技术杂谈 2023年6月22日
    067
  • 你不得不知的python apply()

    大家好,我是小寒 原文链接 今天给大家带来一篇 如何在 pandas 上使用 apply 方法,如果觉得不错,欢迎关注起来。 本文的内容主要如下: 在 Pandas Series …

    技术杂谈 2023年7月25日
    074
  • 一个被封禁的开源框架

    前言 2年前曾整过一个开源框架——违禁词过滤框架LiteBanner。 算是一个工具类的,当时放在开源中国。因为小巧性能高,还可以自定义词库,获得了不少人的star。 因为框架自带…

    技术杂谈 2023年7月11日
    073
  • 2022.22 如何提升技术能力

    最近,看到文章《关于技术能力的思考和总结》,里面的一些点还是值得技术人反思学习的。 对于什么是技术能力,作者提炼了一个模型如下: 首先,技术人要通过练掌握术,提升技术能力,成为团队…

    技术杂谈 2023年5月30日
    0107
  • Java 静态代理、JDK动态代理、CGLIB代理的区别及原理

    Java 静态代理、JDK动态代理、CGLIB代理 代理(Proxy):是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。 好处:可以在目标对象实现的基础…

    技术杂谈 2023年7月24日
    084
  • PyInstaller 打包 python程序成exe

    主题是使用PyInstaller 打包python时遇到一些问题以及解决方案,其中将要打包的程序是用tensorflow做的LSTM算法,这里不会涉及这个算法详解。 本地环境:wi…

    技术杂谈 2023年6月21日
    083
  • Rancher部署并导入K8S集群

    Rancher 的部署可以有三种架构: 高可用 Kubernetes 安装: 建议使用 Kubernetes 程序包管理器 Helm 在专用的 Kubernetes 集群上安装 R…

    技术杂谈 2023年5月31日
    0105
  • 测试驱动开发(TDD)

    测试应用有很多方法,例如,黑盒测试、白盒测试、迭代测试等,然而,这些方法都是从宏观上描述测试的。为了在技术上保障测试的效果,Kent Beck(也是极限编程创始人)提出了在结果上进…

    技术杂谈 2023年5月31日
    0102
  • PHPExcel设置数据格式,数据类型的几种方法

    问题1:PHPExcel 长数字串显示为科学计数。在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在…

    技术杂谈 2023年5月31日
    086
  • 浅析http状态码301、302、303、307、308区别(转载)

    http的重定向我们经常是张口就来,整个流程也非常简单,服务端HTTP返回码是30x,头里面的Location字段代表新的URL。如下图所示: 但重定向也还是有需要深入探讨地方,返…

    技术杂谈 2023年5月31日
    0131
  • Dapr 1.7 之 Unix Domain socket 他来了

    A UNIX socket is an inter-process communication mechanism that allows bidirectional data e…

    技术杂谈 2023年5月30日
    061
  • 花一分钟来看看Worktile是如何为团队协作而生的

    团队协作,我们想的更深、更远、更多,花一分钟来看看我们特别奉献的故事,然后去注册一个账号,邀请小伙伴一起来工作,你会体会Worktile才是真正懂你的协作方式。 支持TerryLe…

    技术杂谈 2023年5月31日
    092
  • BinaryBombs(二进制炸弹实验)

    实验介绍 使用所学知识拆除 Binary Bombs来增强对程序的机器级表示、汇编语言、调试器和逆向工程等理解。 Binary Bombs(二进制炸弹)是一个可执行程序,是 C语言…

    技术杂谈 2023年7月10日
    087
  • java多线程回顾1:线程的概念与创建

    现在几乎所有操作系统都支持多任务,通常一个任务就是一个程序,一个运行中的程序就是一个进程。当一个程序行时,其内部也可能在执行多个任务,进程内每一个任务的执行流,就是一个线程。 所以…

    技术杂谈 2023年7月11日
    065
  • 【新特性速递】更漂亮的主题风格(窈窕主题,君子好逑)

    FineUI 的下个版本(v8.0.0),我们特邀资深UI设计师对我们的整体界面风格进行优化调整,今天给大家带来更漂亮的样式主题风格。 智能树控件样式优化 v7.1.1: v8.0…

    技术杂谈 2023年6月1日
    0102
  • Maven项目搭建-Eclipse版

    一、Maven简单介绍 Maven是基于Java平台的项目构建(mvn clean install)、依赖管理(中央仓库,Nexus)和项目信息管理的项目管理工具。 Maven是基…

    技术杂谈 2023年5月31日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球