LCIS 最长公共上升子序列
这个博客好久没写了,这几天为了准备清华交叉研究院的夏令营,在复习大一大二ACM训练时的一些基础算法,正好碰到LICS,发现没有写在博客里,那就顺便记录一下好了。
参考链接:http://blog.csdn.net/operator456/article/details/8539169
用一个二维数组f[i][j]表示a序列的前i项,b序列的前j项,并且以b[j]结束的LCIS的长度。
当a[i] != b[j]时,f[i][j]=f[i-1][j]; //如果最后一项不等,那么f[i][j]必定与f[i-1][j]或者f[i][j-1]相等,因为这里以b[j]表示结束,所以选取f[i][j]=f[i-1][j]。
当a[i] == b[j]时,f[i][j]=max(f[i-1][k])+1,1<=k<=j-1 && b[j]>b[k]; //求f[i-1]行中的最长,并且保证新增的数大于已经有的数
下面给出的代码采用了滚动数组
int f[N];
int LCIS(int a[],int b[],int lena,int lenb)
{
/*
下面很奇妙之处在于,求f[i-1][k]的时候可以通过一个变量temp来解决。
当k从1遍历到j的同时,可以不断更新temp的值,
如果a[i]>b[j]时,令temp=max(temp,f[i-1][j]);
如果a[i]==b[j]时,令f[i][j]=temp+1。
因为这里对于内存循环j来说,a[i]是不变的,当a[i]=b[j]时,temp的值就相当于max(f[i-1][k]),1<=k<=j-1 && b[j]>b[k]
*/
int i,j,temp;
for(i=;i<=lena;i++)
{
for(j=,temp=;j<=lenb;j++)
{
if(a[i]>b[j] && f[j]>temp)
temp=f[j];
if(a[i]==b[j])
f[j]=temp+;
}
}
temp=;
for(i=;i<=lenb;i++)
if(f[i]>temp)
temp=f[i];
return temp;
}
LCIS 最长公共上升子序列的更多相关文章
- [CodeForces10D]LCIS(最长公共上升子序列) - DP
Description 给定两个数列,求最长公共上升子序列,并输出其中一种方案. Input&Output Input 第一行一个整数n(0<n<=500),数列a的长度. 第二行 ...
- LCIS最长公共上升子序列
最长公共上升子序列LCIS,如字面意思,就是在对于两个数列A和B的最长的单调递增的公共子序列. 这道题目是LCS和LIS的综合. 在LIS中,我们通过两重循环枚举当序列以当前位置为结尾时,A序列中当前 ...
- LCIS 最长公共上升子序列问题DP算法及优化
一. 知识简介 学习 LCIS 的预备知识: 动态规划基本思想, LCS, LIS 经典问题:给出有 n 个元素的数组 a[] , m 个元素的数组 b[] ,求出它们的最长上升公共子序列的长度. 例 ...
- CF10D LCIS 最长公共上升子序列
题目描述 This problem differs from one which was on the online contest. The sequence a1,a2,...,an a_{1}, ...
- LCIS(最长公共上升子序列)Vijos1264神秘的咒语
描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...
- LCIS(最长公共上升子序列)模板
求出LCIS并输出其路径. 1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #inc ...
- CodeForces 10D. LCIS 最长公共上升子序列模板题 + 打印路径
推荐一篇炒鸡赞的blog. 以下代码中有打印路径. #include <algorithm> #include <iostream> #include <cstring& ...
- 【简单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 题目:给你两个数字序列,求出这两个序列的最长公共上升子序列.输出最长的长度,并打表 ...
- 最长公共上升子序列(LCIS)
最长公共上升子序列慕名而知是两个字符串a,b的最长公共递增序列,不一定非得是连续的.刚开始看到的时候想的是先用求最长公共子序列,然后再从其中找到最长递增子序列,可是仔细想一想觉得这样有点不妥,然后从网 ...
随机推荐
- 1008. Elevator (20)
The highest building in our city has only one elevator. A request list is made up with N positive nu ...
- Nunit单元测试的使用
先建立一个需要测试的项目 安装nunit 通过nuget安装Install-Package Nunit 类前加[TestFixture] 要测试的方法前加[Test] using System; u ...
- 自己的php函数库
//判断数组中是否有元素为空的函数,支持多维数组,相似系统函数in_array(value,array,type) function is_null_array($arr) { if(!is_arra ...
- Split字符串分割函数
非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg" Dim arrTest arr ...
- hdu 1575 Tr A
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1575 Tr A Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和), ...
- NPOI导出word,以及对table的一些设置
参考网址:http://www.aiuxian.com/article/p-1970779.html NPOI版本:2.1.3.1 最终效果图: 代码: /// <summary> /// ...
- 61.MII、RMII、GMII接口的详细介绍
概述: MII (Media Independent Interface(介质无关接口)或称为媒体独立接口,它是IEEE-802.3定义的以太网行业标准.它包括一个数据接口和一个MAC和PHY之间的管 ...
- 在package.json中配置Script执行npm run tslint报错问题
今天在学习tslint的时候,按照git clone下angular2-webpack-starter的代码执行npm run lint时,虽然代码进行了检测,但检测完成后npm始终报错, //pac ...
- Haskell 趣学指南 入门笔记(二)
显示类型声明,Haskell是不用定义类型的原因,很像python 想要确定某个表达式的类型 *Main> :t 'a' 'a' :: Char *Main> :t True True : ...
- linux查看有哪些shell可用
1.命令cat /etc/shells [tansheng@localhost ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/das ...