Codevs 2185【模板】最长公共上升子序列
熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们要研究最长公共上升子序列了。
小沐沐说,对于两个串A,B,如果它们都包含一段位置不一定连续的数字,且数字是严格递增的,那么称这一段数字是两个串的公共上升子串,而所有的公共上升子串中最长的就是最长公共上升子串了。
奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子串。不过,只要告诉奶牛它的长度就可以了。
第一行N,表示A,B的长度。
第二行,串A。
第三行,串B。
输出长度。
4
2 2 1 3
2 1 2 3
2
1<=N<=3000,A,B中的数字不超过maxlongint
/*
dp[i][j]表示以s1的第i个元素和s2的第j个元素结尾的LCIS长度
1、若a[i]<a[j],则dp[i][j]=dp[i-1][j]
2、若a[i]==a[j],则dp[i][j]=max(dp[i][k])+1, k=1->j
朴素的求解LCIS(n^3):
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{
dp[i][j]=dp[i-1][j];
if(a[i]==a[j])
{
int tmp=0;
for(int k=1;k<j;++k)
if(a[j]>a[k])
tmp=max(tmp,dp[i-1][k]);
}
}
可以发现,tmp在++j的时候就可以被算出来,所以我们可以省掉枚举k的那重循环,这样就变成了O(n^2)。
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std; const int N=; int n;
int a[N],dp[N]; int main()
{
scanf("%d",&n);
for(int i=;i<=n<<;scanf("%d",&a[i]),++i);
for(int i=,len=;i<=n;len=,++i)
for(int j=n+;j<=n<<;++j)
{
if(a[i]>a[j]&&len<dp[j])
len=dp[j];
else if(a[i]==a[j])
dp[j]=len+;
}
int ans=*max_element(dp+n+,dp+n*+);
printf("%d",ans);
return ;
}
Codevs 2185【模板】最长公共上升子序列的更多相关文章
- codevs 2185 最长公共上升子序列
题目链接: codevs 2185 最长公共上升子序列codevs 1408 最长公共子序列 题目描述 Description熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升 ...
- codevs 2185 最长公共上升子序列--nm的一维求法
2185 最长公共上升子序列 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 钻石 Diamond 题目描述 Description 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目 ...
- 最长公共上升子序列(codevs 2185)
题目描述 Description 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们要研究最长公共上升子序列了. 小沐沐说,对 ...
- 【简单dp】poj 2127 Greatest Common Increasing Subsequence【最长公共上升子序列】【模板】
Sample Input 5 1 4 2 5 -12 4 -12 1 2 4 Sample Output 2 1 4 题目:给你两个数字序列,求出这两个序列的最长公共上升子序列.输出最长的长度,并打表 ...
- 【线型DP模板】最上上升子序列(LIS),最长公共子序列(LCS),最长公共上升子序列(LCIS)
BEGIN LIS: 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序 ...
- 最长公共上升子序列(LCIS)
最长公共上升子序列慕名而知是两个字符串a,b的最长公共递增序列,不一定非得是连续的.刚开始看到的时候想的是先用求最长公共子序列,然后再从其中找到最长递增子序列,可是仔细想一想觉得这样有点不妥,然后从网 ...
- ZOJ 2432 Greatest Common Increasing Subsequence(最长公共上升子序列+路径打印)
Greatest Common Increasing Subsequence 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problem ...
- POJ 2127 最长公共上升子序列
动态规划法: #include <iostream> #include <cstdio> #include <fstream> #include <algor ...
- [CodeForces10D]LCIS(最长公共上升子序列) - DP
Description 给定两个数列,求最长公共上升子序列,并输出其中一种方案. Input&Output Input 第一行一个整数n(0<n<=500),数列a的长度. 第二行 ...
随机推荐
- centos7+ 在线yum安装docker-ce
yum install -y yum-utils //扩展yum功能 yum-config-manager --add-repo http://mirrors.aliyun.com/docker- ...
- Educational Codeforces Round 66 (Rated for Div. 2)
A.直接模拟. #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...
- 创建包含CRUD操作的Web API接口2:实现Get方法
本节是前一节的延续,上一节中我们已经为我们的Web API项目创建必要的基础设施. 在本节中,我们将在我们的控制器类中实现操作方法,这些方法用来处理HTTP GET请求. 根据Web API命名约定, ...
- Jupyter Notebook的配置(密码端口+远程登陆+nbextension)
1 生成配置文件 linux和mac系统打开终端 windows系统打开anaconda自带的终端 jupyter notebook --generate-config 此时系统会生成 ~/.jupy ...
- vim的多文件编辑和多窗口功能
有的时候我们可能会需要打开多个文件同时进行编辑,例如把一个文件的内容复制到另一个文件中时: 多文件编辑 :n :编辑下一个文件 :N : 编辑上一个文件 :files :列出目前这个vim打开的所有文 ...
- Python小爬虫-读取豆瓣电影名称导出csv
# -*- coding: utf-8 -*- __author__ = 'YongCong Wu' # @Time : 2019/6/20 10:27 # @Email : : 1922878025 ...
- vue element-ui el-date-picker如何限制选择时间为当天之前
<el-date-picker v-model="firstdate" :picker-options="pickerOptions0" type= ...
- 1+X证书学习日志——函数
工具得特点: 1:重复性使用 2:隐藏内部原理(细节) 3:选择性应用 创建函数: 1:关键字 function 函数名称(){ } 2:字面量创建 var fn = function(){ } 3: ...
- @PropertySources和@ImportReSources注解
修改默认加载的配置文件,加载指定的配置文件. @PropertySources 格式:@PropertySources(value={"classpath:xxx.xxx"}) @ ...
- 4.kafka API producer
1.Producer流程首先构建待发送的消息对象ProducerRecord,然后调用KafkaProducer.send方法进行发送.KafkaProducer接收到消息后首先对其进行序列化,然后结 ...