首页 > 其他分享 >P1439 【模板】最长公共子序列

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

时间:2024-10-22 15:34:32浏览次数:9  
标签:int 元素 tot stk P1439 100010 序列 模板

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

实际上这题不能算 dp,应该是贪心。

先区分两个概念:

  • LIS:Longest Increasing Subsequence,最长递增子序列
  • LCS:Longest Common Subsequence,最长公共子序列

b 数组中的元素映射为其在 a 数组中的位置,问题就从 LCS 变成了 LIS。

在求解 LIS 时,开一个单调栈,如果 a[i] 大于等于栈顶,直接进栈。否则二分栈内所有元素,将第一个大于它的元素改为它,最终答案就是栈的大小。

原理/正确性:贪心选择它能换掉的最大元素,栈内元素越小,后面元素进栈的门槛也就越低,就能实现最大化栈内元素。

注意:此算法只能实现求个数,无法求出每一个是什么,如果有这个需求,只能用 \(O(n^2)\) dp。

代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int a[100010],b[100010];
int mp[100010];
int c[100010];
int stk[100010],tot;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		mp[a[i]]=i;
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	for(int i=1;i<=n;i++){
		c[i]=mp[b[i]];
	}
	for(int i=1;i<=n;i++){
		if(c[i]>stk[tot]){
			stk[++tot]=c[i];
		}
		else{
			*lower_bound(stk+1,stk+tot+1,c[i])=c[i];
		}
	}
	cout<<tot<<endl;
} 

标签:int,元素,tot,stk,P1439,100010,序列,模板
From: https://www.cnblogs.com/UserJCY/p/18492979/jt_dp_P1439

相关文章

  • P4462 [CQOI2018]异或序列
    [CQOI2018]异或序列题目描述已知一个长度为n的整数数列\(a_1,a_2,...,a_n\),给定查询参数l、r,问在\(a_l,a_{l+1},...,a_r\)区间内,有多少子序列满足异或和等于k。也就是说,对于所有的x,y(I≤x≤y≤r),能够满足\(a_x\bigoplusa_{x+1}\bigoplus...\bigoplusa_y=k\)......
  • P4247 [清华集训2012]序列操作
    题目描述有一个长度为\(n\)的序列,有三个操作:Iabc表示将\([a,b]\)这一段区间的元素集体增加\(c\);Rab表示将\([a,b]\)区间内所有元素变成相反数;Qabc表示询问\([a,b]\)这一段区间中选择\(c\)个数相乘的所有方案的和\(\mod19940417\)的值。对于100%的数据,\(n\leq500......
  • PbootCMS提示模板文件/template/default/html/about.htmI不存在怎么办
    解决方案一:在 default 文件夹下新建 html 文件夹,将模板文件移动进去使用FTP客户端:使用FTP客户端(如FileZilla)连接到你的服务器。导航到网站根目录的 template 文件夹。新建 html 文件夹:在 default 文件夹中新建一个名为 html 的文件夹。移动模板......
  • 3、模板方法模式
    一、模板方法模式,简单的说就是在一个上层的抽象类中,定义了一些操作的抽象方法,有一个总体的方法组织了怎么去调用这个操作方法,而操作方法的具体实现由子类去实现,达到抽取公共部分放在父类模板中,子实现各自己不对的部分publicabstractclassAbstractTemplate{protectedvi......
  • VMD-DBO-CNN-BiLSTM四模型多变量时间序列光伏功率预测一键对比 Matlab代码
    基于VMD-DBO-CNN-BiLSTM、VMD-CNN-BiLSTM、VMD-BiLSTM、BiLSTM四模型多变量时间序列光伏功率预测一键对比(仅运行一个main即可)[原创未发表]Matlab代码每个模型的预测结果和组合对比结果都有!运行步骤:1.先运行main1进行VMD分解2.在运行main2进行四模型一键对比代码......
  • 11种经典时间序列预测方法:理论、Python实现与应用
    时间序列分析和预测在现代数据科学中扮演着关键角色,广泛应用于金融、经济、气象学和工程等领域。本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。这些方法包括:自回归(AR)移动平均(MA)自回归移动平均(ARMA)自回归积分移动平均(ARIMA)季节性自回归积分......
  • 如何根据标记引物序列找到基因组上具体位置?
    要找到基因组上特定位置,仅凭标记引物序列,可以采用以下几种方法:利用在线工具进行In-SilicoPCR:可以使用UCSCGenomeBrowser提供的In-SilicoPCR工具(http://genome.ucsc.edu/cgi-bin/hgPcr)进行在线分析。这个工具允许你输入引物序列,并在基因组数据库中搜索匹配的序列。它还会......
  • 保研推荐信模板
    尊敬的xx大学xx学院领导,您好!我是xx大学xx学院的xxx,是xx同学《xx》课程的授课老师。很高兴作为推荐人向贵单位推荐xx攻读硕士学位。xx是转专业过来的,此前我并不认识他,但这个每次上课坐在前排正对着讲台的男孩给了我很深的印象。在我眼里,他是那种善于发现问题并解决问题的人,经......
  • Java反序列化 - CC1链 (代码审计)
    R###一、环境准备:Java环境:Java_1.8.0_8u65ApacheCommonsCollections3.2.2版本二、漏洞简述:cc链是Apachecommonscollections反序列漏洞利用链的简称。可以通过构造恶意类,利用Java反序列化漏洞进行RCE。漏洞复现:CC1链源头:org.apache.commons.collections.Transformer#tr......
  • PbootCMS网站怎么修改HTML模板文件
    修改HTML文件连接FTP服务器:使用FTP客户端连接到你的服务器。定位模板文件夹:导航到 /template/你的模板名称/ 目录。找到需要修改的HTML文件。编辑HTML文件:下载需要修改的HTML文件到本地。使用文本编辑器打开并修改HTML文件。例如,修改某个段落的文本:html......