洛谷 P1439 最长公共子序列

【动态规划常用解题思路】2 —— 最长公共子序列 题目描述给出1-n的两个排列P1和P2,求它们的最长公共子序列。输入第一行是一个数n;(n是5~1000之间的整数)接下来两行,每行为n个数,为自然数1-n的一个排列(1-n的排列每行的数据都是1-n之间的数,但顺序可能不同,比如1-5的排列可以是:1 2 3 4 5,也可以是2 5 4 3 1)。输出一个整数,即最长公共子序列的长度。样例。 阅读详情
传送门

题目描述

给出1-n的两个排列P1和P2,求它们的最长公共子序列。

输入输出格式

输入格式:

第一行是一个数n,接下来两行,每行为n个数,为自然数1-n的一个排列。

输出格式:

一个数,即最长公共子序列的长度

输入输出样例

输入样例:

5 
3 2 1 4 5

1 2 3 4 5

输出样例:

3

说明

【数据规模】

对于50%的数据,n≤1000

对于100%的数据,n≤100000

题解

用 二分法求LIS求最长公共子序列(LCS)。

我们定义a[i]为P2排列中第i个数在P1排列中的位置。

由于最长公共子序列是向后比对的,则如果a[i]是递增的,就说明这一段在P1和P2中的位置都偏后,可以考虑纳入LCS。

则问题就变为求a数组的LIS。

Code:

#include<cstdio>
#include<cstdlib>

int a[100010],b[100010],f[100010];
int n;

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		b[x]=i;
	}
	for(int i=1;i<=n;i++)
	{
		int x;
		scanf("%d",&x);
		a[i]=b[x];
	}
	int len=1;
	f[1]=a[1];
	for(int i=2;i<=n;i++)
	{
		if(f[len]<a[i]) f[++len]=a[i];
		else
		{
			int mid,l=1,r=len;
			while(l<r)
			{
				mid=(l+r)/2;
				if(f[mid]>a[i]) r=mid;
				else l=mid+1;
			}
			if(f[l]>a[i]) f[l]=a[i];
		}
	}
	printf("%d",len);
}

【题解-洛谷】P1439 【模板】最长公共子序列 给出12n的两个排列P1​和P2​,求它们的最长公共子序列。 阅读详情

相关推荐

动态规划——最长公共子序列(洛谷P1439)

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。BAT面试经验实战系列:Spring全家桶+Redis等其他相关的电子书:源码+调优面试真题:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》

ssdrrg的博客 874

洛谷P1439 【模板】最长公共子序列

但这道题的n高达1e5,朴素做法无论时间还是数组都不够用,但两序列长度相同并且都是1-n的排列,因此可以进行优化将时间复杂度降为nlogn,数组降为1维。

yaozizhi_yang的博客 921

洛谷P1439 【模板】最长公共子序列(dp+二分优化)

题目描述 给出1-n的两个排列P1和P2,求它们的最长公共子序列。 输入格式 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列。 输出格式 一个数,即最长公共子序列的长度 输入输出样例 输入 #1复制 5 3 2 1 4 5 1 2 3 4 5 输出 #1复制 3 说明/提示 【数据规模】 对于50%的数据,n≤1000 对于100%的数...

Mr_Kingk的博客 665

【洛谷】P1439 【模板】最长公共子序列

https://www.luogu.com.cn/problem/P1439题目描述: 给出1,2,…,n1,2,\ldots,n1,2,…,n的两个排列P1P_1P1​和P2P_2P2​,求它们的最长公共子序列。输入格式: 第一行是一个数nnn。接下来两行,每行为nnn个数,为自然数1,2,…,n1,2,\ldots,n1,2,…,n的一个排列。输出格式: 一个数,即最长公共子序列的长度。数据范围: 对于50%50\%50%的数据,n≤103n \le 10^3n≤103; 对于100%100\%100%

数学、算法爱好者的博客 818

XGBoost特征重要性为0的问题:深度解析与应对策略

在机器学习领域,XGBoost(Extreme Gradient Boosting)作为一款高效且强大的集成学习算法,已经被广泛应用于各类预测任务中。然而,在实际应用过程中,许多数据科学家和工程师们遇到了一个令人困惑的现象——某些特征的重要性值为0。这不仅影响了模型的解释性,还可能导致特征选择过程中的误判。本文将深入探讨这一问题,分析其背后的原因,并提供相应的解决方案。在深入探讨特征重要性为0的问题之前,我们首先需要了解XGBoost是如何计算特征重要性的。XGBoost提供了三种常见的特征重要性计算方法:

cda2024的博客 1705

DEM数据下载,拼接,裁剪

目录: 1、数字高程模型(DEM)的数据下载 2、在ENVI里面进行拼接,生成SARscape标准格式的DEM数据3、在ArcGIS里面安装已有的矢量范文,进行掩膜裁剪 4、注意事项 数字高程模型的数据下载: 网址:http://dwtkns.com/srtm30m/ 1.对研究区域进行经纬度选择,然后进行选择下载即可 2.下载的数据是.hgt格式的,按照不同的需求进行转换,这里我是用于ENVI处理,且下载了四个,所有进行了拼接,拼接、格式转换如下 注:可能有时候需要登陆注册,点击下...

weixin_40874151的博客 2万+

【洛谷】P1439 【模板】求最长公共子序列

【洛谷】P1439 【模板题】求最长公共子序列 1.题意 给出两个序列,如何求出其最长公共子序列? 2.分析 step1.映射序列 step2.用O(NlogN)求最长不下降子序列

说文科技,做有态度的研究。 950

构建个体结构脑网络的另一种方法

这篇文献提出了一种构建个体结构脑网络的方法即Morphometric INverse Divergence (MIND),通过T1像数据即可对每个被试构建一个脑网络,且通过多个特征进行构建而非单一的特征。即可获得由4个特征得到的个体结构网络矩阵,可以根据自己的需求采用不同的特征组合得到网络矩阵,也可以结合T1/T2像得到髓鞘化相关的网络矩阵,后续可修改代码批量处理自己的数据。这是文献贴出来的代码。在终端直接克隆到本地。2.修改路径运行代码。

weixin_52073820的博客 823

洛谷 P1439 【模板】最长公共子序列【线性dp+dp模型转换】

总结:这个题目属于诈骗题了,题目表面是求最长公共子序列,但是n非常大,n=1e5,显然最长公共子序列的那个O(n^2)解法过不了,观察状态转移方程也没有发现很明显的优化方式,但是我们画图之后发现了一个性质,就将原本的求最长公共子序列变为了求最长上升子序列,然后采用最长上升子序列二分+贪心写法这个题目就可以过了,这个题目纯属套着羊皮的狼,挂羊头卖狗肉,题目给的虽然是求最长公共子序列,但是本质上就是求最长上升子序列。,n 的两个排列 P1​ 和 P2​ ,求它们的最长公共子序列。第一行是一个数 n。

lianxuhanshu_的博客 1516

(三)UPF之Domain Coverage Relationship(Cover、Equivalent、Independent)

整个Soc架构中一般会存在多个Power Domain,不同的Power Domain之间也存在着一定的Coverage关系。在Cadence工具中,这种。不同的Domain Coverage关系中,各个Domain存在着一定的关联()。

Mr.翟的博客 1424

【Unity】【WebRTC】如何用Unity而不是浏览器接收远程画面

之前几篇我们讨论了如何设置信令服务器,如何发送画面给远端以及如何用浏览器查看同步画面,今天来讨论如何实现Unity内部接收画面。看本篇之前请先看过之前将web服务器设置和基本远程画面功能的几篇博文。在Unity编辑器中打开一个示例项目,点击BroadCast按钮。4. 再点击Receiver按钮,Start。Build一个示例项目,并运行这个项目。启动Web.app。

每日出拳老爷子的博客 1721

洛谷 P1439 【模板】最长公共子序列

洛谷 P1439 【模板】最长公共子序列 Description 给出1-n的两个排列P1和P2,求它们的最长公共子序列。 Input 第一行是一个数n, 接下来两行,每行为n个数,为自然数1-n的一个排列。 Output 一个数,即最长公共子序列的长度 Sample Input 5 3 2 1 4 5 1 2 3 4 5 Sample Output 3 Data Size ...

weixin_30362801的博客 123

Nvidia Jetson平台 JP4.2.1版本GStreamer视频采集异常问题调试记录

Nvidia Jetson平台GStreamer in JP4.2.1不能采集但是 v4l2-ctl和 ffmpeg能正常采集视频。

jzwjzw19900922的博客 2124

洛谷 P1439 【模板】最长公共子序列(LCS)

洛谷 P1439 【模板】最长公共子序列 解析: 我们可以用dp[i][j]来表示第一个串的前i位,第二个串的前j位的LCS的长度,那么我们是很容易想到状态转移方程的: (1)如果当前的a[ i ]和b[ j ]相同(即是有新的公共元素) 那么 dp[ i ] [ j ] = max(dp[ i ] [ j ], dp[ i-1 ] [ j-1 ] + 1); (2)如果不相同,即无法更新公共元素...

化身孤岛的鲸o的博客 558

188、LLC谐振变换器的样机调试实战(EMI测试)

本文分享了LLC谐振变换器EMI调试的实战经验。作者通过300W电源案例,指出LLC的EMI问题主要来自谐振腔共模电流和死区振铃,并提出三板斧解决方案:优化功率回路布局、合理选择共模电感、正确配置X/Y电容。文章详细分析了谐振电容位置、MOSFET走线、变压器屏蔽等关键设计要点,并列举示波器探头、滤波器接地等常见误区。最后强调EMI调试70%依赖布局优化,建议预扫测试、数据记录并保留6dB余量。全文以实际案例贯穿,为LLC电源EMI设计提供了实用指导。

Jack010169的博客 57

以太网MII、RMII、GMII、RGMII(三)

RMII接口收发的数据位宽为2bit,因此管脚数目大为减少,在高密端口PHY中应用较多,但是由于其是MAC和PHY共用一个参考时钟,接口之间的距离不能太远;一般的GMII接口都有两个发送参考时钟:TX_CLK和GTX_CLK,两者的方向是不一样的,前者有PHY提供(同MII),后者由MAC或外部参考时钟源提供,绝大多数GMII接口都是兼容MII接口的,在用作MII模式时,使用TX_CLK和8根数据线中的4根。MII接口中的接收时钟和发送时钟是分开的,而且都是由PHY芯片提供给MAC芯片的。

qq_42357877的博客 2333

洛谷java实现(P1439[模板]最长公共子序列)

题目链接:https://www.luogu.com.cn/problem/P1439 首先这是一道绿题,如果用动态规划(时间复杂度n^2)对于n=10 ^5肯定过不了,当然动态规划适合leetcode这道题1143. 最长公共子序列感兴趣可以看看 题解如下: /** * 动态规划+内存优化 */ public int longestCommonSubsequence(String text1, String text2) { if (text1 == null || te.

malloc_can的博客 346

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

洛谷P1439 【模板】最长公共子序列 题解

因为最长公共子序列是按位向后比对的,所以a序列每个元素在b序列中的位置如果递增,就说明b中的这个数在a中的这个数整体位置偏后,可以考虑纳入LCSLCS——那么就可以转变成nlognnlogn求用来记录新的位置的map数组中的**LISLIS**。这其实就是一种几近贪心的思想:我们当前的上升子序列长度如果已经确定,那么如果这种长度的子序列的结尾元素越小,后面的元素就可以更方便地加入到这条我们臆测的、可作为结果、的上升子序列中。/*原因很简单,每遇到一个新的元素时,就跟已经记录的f数组当前所记录的最长。

2401_88972062的博客 374

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

洛谷P1439 两个排列的最长公共子序列

本文研究了排列的最长公共子序列(LCS)问题。通过将排列中的元素位置映射,将LCS问题转化为最长上升子序列(LIS)问题。针对LIS问题,提出了一种基于贪心+二分的优化算法:维护一个dp数组记录各长度LIS的最小末尾值,利用二分查找快速更新。该算法将时间复杂度从O(n²)优化至O(nlogn),适用于大数规模(n≤1e5)的数据。文中给出了完整代码实现,并通过坐标映射将LCS问题成功转化为LIS问题求解。

AbelTomato的博客 887

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

洛谷 P1439:【模板】最长公共子序列 ← 子序列问题(n>1e3)

本题算法解析中求“最长公共子序列”问题的代码,适用于 n≤10^3 的场景。

hnjzsyjyj的专栏 453

洛谷 P1439 【模板】最长公共子序列 【一题掌握和分清LCS和LIS】

想做一题轻松的,于是就选了这个叫做最长公共子序列的模板题,但是它不讲武德,公共子序列只是幌子,最长上升子序列才是本题的关键。 LCS和LIS究竟谁在本题更胜一筹?快点击查看(内含LCS和LIS两种方法)

flyunicorninsky的博客 1201

洛谷 P1439 【模板】最长公共子序列 菜鸟题解

P1439 【模板】最长公共子序列 题目链接: https://www.luogu.com.cn/problem/P1439 题目解释: 没什么好解释的,看看时间复杂度,nlognnlog_nnlogn​求正解,所以简单的DP是不行的,换思路。 问题分析: 这个题应该有很多解,很多博主写过了,主要解法就是用最长上升子序列,至于为什么用最长上升子序列解最长公共子序列,我今天主要解释一下这个问题。 ...

u011414041的博客 409
上一篇: 洛谷 P3373 线段树 2
下一篇: 洛谷 P3378 堆
Dawn_LLLLLLL
博客等级 码龄9年 12粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值