贼有意思[最长上升公共子序列](SAC大佬测试题)
题目描述
Awson 最近越来越蠢了,一天就只知道 zyys。
他定义了一个 zyys 数列:这个数列满足:
1.是另外两个数列 A,B 的公共子序列;
2.数列单调递增。
现在他有一个问题,我们假设知道两个长度均为 N 的序列 A,B,如何去找最长的 zyys
数列呢?由于他只会 zyys 了,他把这个问题交给了你。
输入格式
第一行包含一个整数 N,表示序列 A,B 的长度;
接下来 2 行,每行 N 个数,表示序列 A,B。
输出格式
一行,输出最长的 zyys 数列。
输入样例
5
2 3 3 3 4
2 3 3 4 5
输出样例
3
数据范围
对于 50%的数据,有 N <= 50
对于 100%的数据,有 N <= 5000
50分:
f[i][j]=f[i'][j'] (a[i]==b[j],a[i']<a[i],a[i']==b[j'],i'<i,j'<j)
复杂度为O(n^4)
100分,只要稍作修改
我们令 f[i][j]表示A[1~i]以 B[j]为最后该序列的最后一个数的最长长度。
如果a[i]==b[j]则f[i][j]=maxlen(f[i-1][j'])+1 (a[i]>b[j'],j'<j)
否则显然f[i][j]=f[i-1][j]
maxlen那一部分边循环边更新就行了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
int a[],b[];
int f[][],ans;
int main()
{
int i,j,k,l;
cin>>n;
for (i=; i<=n; i++)
{
scanf("%d",&a[i]);
}
for (i=; i<=n; i++)
{
scanf("%d",&b[i]);
}
for (i=; i<=n; i++)
{
int len=;
for (j=; j<=n; j++)
{
if (a[i]==b[j]) f[i][j]=len+;
else f[i][j]=f[i-][j];
if (a[i]>b[j]&&f[i-][j]>len) len=f[i-][j];
ans=max(ans,f[i][j]);
}
}
cout<<ans;
}
贼有意思[最长上升公共子序列](SAC大佬测试题)的更多相关文章
- hdoj1423 最长上升公共子序列
hdoj1423 题目分析: 两个数组a[n1] , b[n2], 求最长上升公共子序列. 我们可用一维存储 f[i] 表示 b 数组以 j 结尾, 与 a[] 数组构成的最长公共上升子序列. 对数组 ...
- 最长连续公共子序列(LCS)与最长递增公共子序列(LIS)
最长公共子序列(不连续) 实际问题中也有比较多的应用,比如,论文查重这种,就是很实际的一个使用方面. 这个应该是最常见的一种了,不再赘述,直接按照转移方程来进行: 按最普通的方式就是,直接构造二维矩阵 ...
- 最长公共子序列(LCS)、最长递增子序列(LIS)、最长递增公共子序列(LICS)
最长公共子序列(LCS) [问题] 求两字符序列的最长公共字符子序列 问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
- 求最长连续公共子序列 POJ 3080
Description The Genographic Project is a research partnership between IBM and The National Geographi ...
- LCIS 最长上升公共子序列问题
首先点名一个串叫 L1,另一个叫L2. 明显的是一个DP,那么我们来探讨下如何求得答案. 朴素的算法 首先我们定义状态$dp[ i ][ j ]$表示L1中前i个与L2中前j个的最长公共上升子序列. ...
- HDU 1423 最长上升公共子序列(LCIS)
题目大意: 给定两个数字数组a[] , b[],在这两个数组中找一个最长的公共上升子序列,输出最长的长度 从别人地方copy的= = LCIS理解: (1)f[i][j] 表示 a的前i,和b串前 j ...
- poj3080Blue Jeans(在m个串中找到这m个串的 最长连续公共子序列)
Description The Genographic Project is a research partnership between IBM and The National Geographi ...
- CSU-1120 病毒(最长递增公共子序列)
你有一个日志文件,里面记录着各种系统事件的详细信息.自然的,事件的时间戳按照严格递增顺序排列(不会有两个事件在完全相同的时刻发生). 遗憾的是,你的系统被病毒感染了,日志文件中混入了病毒生成的随机伪事 ...
- 一维数组解最长上升公共子序列(LCIS)
#include<bits/stdc++.h> using namespace std; + ; int n,a[maxn],b[maxn],dp[maxn]; int main() { ...
随机推荐
- JavaScript(第三十二天)【Ajax】
2005年Jesse James Garrett发表了一篇文章,标题为:"Ajax:A new Approach to Web Applications".他在这篇文章里介绍了一种 ...
- C语言程序设计基础-第1周作业-初步
1.安装带有计算机术语的翻译软件 2.在自己电脑上安装C编译器,windows系统建议安装dev-c++,其他系统自行查找. 3.加入课程小组,有任何疑问可以在小组中提问:https://group. ...
- Json转model对象,model转json,解析json字符串
GitHub链接: https://github.com/mozhenhau/D3Json D3Json 通过swift的反射特性,把json数据转换为model对象,本类最主要是解决了其他一般jso ...
- maven创建web工程
使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...
- bzoj 4373 算术天才⑨与等差数列
4373: 算术天才⑨与等差数列 Time Limit: 10 Sec Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.ph ...
- python性能分析--cProfile
Python标准库中提供了三种用来分析程序性能的模块,分别是cProfile, profile和hotshot,另外还有一个辅助模块stats.这些模块提供了对Python程序的确定性分析功能,同时也 ...
- LeetCode & Q414-Third Maximum Number-Easy
Array Math Description: Given a non-empty array of integers, return the third maximum number in this ...
- 如何将portfolio产品图片上的悬停去掉?
在Avada主题里,文章和portfolio的分类界面的图片,鼠标移入后都会出现这个东西 那么如何把它去掉,改为直接点击产品图片后进入产品详情页呢? 在theme option里搜索image rol ...
- SpringCloud的DataRest(一)
一.概念与定义 Spring Data Rest 基于Spring Data的repository,可以把 repository 自动输出为REST资源, 这样做的好处: 可以免去大量的 contro ...
- api-gateway实践(04)新服务网关 - 新手入门
一.网关引擎环境 1.下载代码 2.搭建环境 3.打包部署 二.配置中心环境 1.下载代码 2.搭建环境 3.打包部署 三.创建业务实例 1.以租户身份登录配置中心,注册 group.version. ...