洛谷 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

深度学习中的编码器-解码器架构

解码的作用:转换为人类可理解的形式,解码器的任务是将编码器生成的中间表示(上下文向量)转换回人类可理解的输出形式(如翻译后的文本、生成的图像描述等)。解码器通过逐步生成输出序列,使得最终的输出符合人类的理解和需求。编码的作用:转换为机器可理解的形式,编码器将输入数据(如文本、图像等)转换为一种机器更容易处理和理解的形式,即上下文向量或编码。在深度学习中,编码器(Encoder)解码器(Decoder)是常见的神经网络架构,通常用于处理序列到序列(seq2seq)任务,如机器翻译、文本摘要和图像描述等。

xxk1323的博客 1093

AGV舵轮选型实战:从核心参数到精准计算的完整指南

本文提供了一份详尽的AGV舵轮选型实战指南,强调从经验决策转向数据驱动。文章系统讲解了如何将工况需求转化为核心参数,并通过牵引力、扭矩、功率等关键计算步骤,指导工程师完成精准选型,避免因选型不当导致的运行故障与效率低下。

醉三国 495

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

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

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

人工势场法在自动驾驶避障中的实践与优化

本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。

weixin_29208327的博客 927

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

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

lianxuhanshu_的博客 1516

京东风控算法工程师带你解读Action Model-精细化运营(上篇)

电影《蝴蝶效应》中,男主拥有回到童年改变过去的能力,虽然在剧中男主一次次穿越时空拯救世界,但由于他无法预见自己做出的抉择对未来产生的其他影响,最终还是没能阻止悲剧的发生。可见,一个好的决策需要衡量其对未来产生的影响。JDD风控算法团队本期为大家解惑最优决策难题的解决方法-Action Model。

JDD风控算法的博客 1917

Linux内存优化:KSM技术原理与实践指南

内存共享是提升虚拟化环境资源利用率的关键技术,其核心原理是通过识别相同内容的内存页进行合并。Linux内核的KSM(Kernel Samepage Merging)机制采用红黑树数据结构管理内存页,通过多级哈希比较算法实现高效合并。该技术能显著降低物理内存消耗,提升CPU缓存命中率,特别适用于运行大量相似虚拟机实例的场景。在容器化和云计算环境中,KSM与NUMA优化、内存气球等技术协同,可实现40%-60%的内存节省。典型应用包括金融云平台的高密度虚拟机部署,以及Kubernetes集群的基础镜像优化。

weixin_28730353的博客 369

洛谷 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

unity中基于NGUI实现一张图片上在某个地方挖个洞

按照策划的要求,引导时只有被引导的图片是高亮的,其余地方都是黑色半透明,如下图所示: 对应的实现shader如下: Shader "Unlit/TutorialBg" { Properties { _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {} _ClipRange0 ("Clip Vector

手机游戏开发 3698

洛谷 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

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1346

ProgLoss+STAL 技术详解:YOLO26 小目标检测增强方案

本文提出了一种基于ProgLoss渐进式损失函数和STAL小目标感知标签分配的YOLO26增强方案。针对小目标检测中特征信息少、正负样本不平衡等难题,STAL通过尺度感知的标签分配策略动态调整候选样本数量和IoU阈值,为小目标分配更多正样本;ProgLoss则根据训练阶段动态调整分类和回归损失的权重,早期侧重定位能力,后期加强分类精度。实验表明,该组合方案显著提升了小目标检测性能,在COCO数据集上小目标AP达到38.2%,比基线提升6.5个百分点。该方法为遥感、监控等场景的小目标检测提供了有效解决方案。

一键难忘的博客 1285

洛谷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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

2401_88972062的博客 374

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

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

AbelTomato的博客 887

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

洛谷 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、付费专栏及课程。

余额充值