Problem Description
This is a problem from ZOJ 2432.To make it easyer,you just need output the length of the subsequence.
 
Input
Each sequence is described with M - its length (1 <= M <= 500) and M integer numbers Ai (-2^31 <= Ai < 2^31) - the sequence itself.
 
Output
output print L - the length of the greatest common increasing subsequence of both sequences.
 
Sample Input
1 5 1 4 2 5 -12 4 -12 1 2 4
 
Sample Output
2
 
Source
 
Recommend
lcy
分析:经典的LCIS问题,用dp求解,既然问题是LIS+LCS,那么状态转移方程肯定是结合了这两道题的。观察一下这两道题的方程有啥特点LIS中的状态是以某一位结尾的,LCS中的表示到第几位,那么LCIS就要把这两个特点结合起来,一维表示到第几位,一维表示以某一位结尾,那么设f[i][j]表示a中前i个和b中前j个的LCIS,并且以b[j]结尾,显然如果a[i] != b[j],那么f[i][j] = f[i-1][j],否则f[i][j] = max{f[i-1][k]} (1 <= k < j && b[k] < b[j]),三重循环,复杂度要爆表了.
      考虑一下能不能只用两重循环,找最大值的部分,我们要找到b[k] < b[j]的最大值f[i-1][k],我们能不能不枚举k呢?注意到我们每次枚举j的时候都是重复找了最大值的,如果a[i] > b[k]了,就更新最大值,因为我们要用最大值来更新a[i] = b[k]的情况,既然a[i]都大于b[k]了,那么自然b[k] < b[k'],因为都是顺序枚举的,保证都会更新到.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; const int inf = 0x7ffffff; int t,l1,l2,a[],b[],f[][],ans,maxx; int main()
{
scanf("%d",&t);
while (t--)
{
memset(f,,sizeof(f));
ans = ;
scanf("%d",&l1);
for (int i = ; i <= l1; i++)
scanf("%d",&a[i]);
scanf("%d",&l2);
for (int i = ; i <= l2; i++)
scanf("%d",&b[i]);
for (int i = ; i <= l1; i++)
{
maxx = ;
for (int j = ; j <= l2; j++)
{
f[i][j] = f[i - ][j];
if (a[i] > b[j])
maxx = max(maxx,f[i-][j]);
if (a[i] == b[j])
f[i][j] = maxx + ;
}
}
for (int i = ; i <= l2; i++)
ans = max(ans,f[l1][i]);
if (t != )
printf("%d\n\n",ans);
else
printf("%d\n",ans);
} return ;
}

HDU1423 最长公共上升子序列LCIS的更多相关文章

  1. 最长公共上升子序列(LCIS)

    最长公共上升子序列慕名而知是两个字符串a,b的最长公共递增序列,不一定非得是连续的.刚开始看到的时候想的是先用求最长公共子序列,然后再从其中找到最长递增子序列,可是仔细想一想觉得这样有点不妥,然后从网 ...

  2. [ACM_动态规划] UVA 12511 Virus [最长公共递增子序列 LCIS 动态规划]

      Virus  We have a log file, which is a sequence of recorded events. Naturally, the timestamps are s ...

  3. hdu 1423 最长公共递增子序列 LCIS

    最长公共上升子序列(LCIS)的O(n^2)算法 预备知识:动态规划的基本思想,LCS,LIS. 问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列). 首先我们可以看到,这个问题具有相 ...

  4. hdu1423 最长公共上升子序列

    题目传送门 Greatest Common Increasing Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  5. 动态规划——最长公共上升子序列LCIS

    问题 给定两个序列A和B,序列的子序列是指按照索引逐渐增加的顺序,从原序列中取出若干个数形成的一个子集,若子序列的数值大小是逐渐递增的则为上升子序列,若A和B取出的两个子序列A1和B1是相同的,则A1 ...

  6. HDU-1423 最长公共上升子序列(LCIS)

    问题描述: 给定两个字符串x, y, 求它们公共子序列s, 满足si < sj ( 0 <= i < j < |s|).要求S的长度是所有条件序列中长度最长的. 做过最长公共子 ...

  7. LCIS最长公共上升子序列

    最长公共上升子序列LCIS,如字面意思,就是在对于两个数列A和B的最长的单调递增的公共子序列. 这道题目是LCS和LIS的综合. 在LIS中,我们通过两重循环枚举当序列以当前位置为结尾时,A序列中当前 ...

  8. [CodeForces10D]LCIS(最长公共上升子序列) - DP

    Description 给定两个数列,求最长公共上升子序列,并输出其中一种方案. Input&Output Input 第一行一个整数n(0<n<=500),数列a的长度. 第二行 ...

  9. LCIS 最长公共上升子序列问题DP算法及优化

    一. 知识简介 学习 LCIS 的预备知识: 动态规划基本思想, LCS, LIS 经典问题:给出有 n 个元素的数组 a[] , m 个元素的数组 b[] ,求出它们的最长上升公共子序列的长度. 例 ...

随机推荐

  1. android开发学习 ------- Error:Failed to open zip file.

    我们用Android Studio   Sync Project项目的时候,会出现如下的错误: 解决方案: Project视图下, 这块 https 改为 http 就可以了.

  2. Dapper系列之三:Dapper的事务修改与删除

    Dapepr的Update和Delete Dapper入门Dapper查询 上两篇文章我们介绍Dapper中添加和查询.本篇文章我们继续讲解修改和删除....如果本篇文章看不懂,请看阅读上两篇Dapp ...

  3. 【转】深入理解Android中的SharedPreferences

    SharedPreferences作为Android中数据存储方式的一种,我们经常会用到,它适合用来保存那些少量的数据,特别是键值对数据,比如配置信息,登录信息等.不过要想做到正确使用SharedPr ...

  4. 《Head First HTML与CSS》的CSS属性

    关于继承的结论. 1.元素选择器的作用强于继承的作用:用户定义强于浏览器默认(详见(3)<Head First HTML与CSS>学习笔记---CSS入门的2) 2.基于类的选择器> ...

  5. Understanding Scroll Views 深入理解 scroll view 读书笔记

    Understanding Scroll Views 深入理解 scroll view  读书笔记   It may be hard to believe, but a UIScrollView is ...

  6. 6 Specialzed layers 特殊层 第二部分 读书笔记

    CAGradientLayer   CAGradientLayer is used to generate a smooth gradient between two or more colors. ...

  7. EJB 使用多个数据源问题

    编辑 删除 如果在JBoss中同时使用俩个数据源就会发生如下异常: Transaction is not active: tx=TransactionImple < ac, BasicActio ...

  8. qt qtableview 样式设置

    转载请注明出处:http://www.cnblogs.com/dachen408/p/7531159.html 1.设置tableview的列宽时,必须先setModel再setColumnWidge ...

  9. vSphere Client用户名密码保存记录

    vSphere Client在访问ESXi主机或vCenter后是默认不保存登录用户名和密码的,不过可以通过修改配置文件来保存,方便访问连接. 方法如下: 打开配置文件路径(实际安装路径):D:\Pr ...

  10. 升级或者重装Discuz! 版本后 QQ互联英文乱码显示的正确解决方法

    升级Discuz! X3版本QQ互联英文乱码!connect_viewthread_share_to_qq!  目前Discuz!论坛上 最简单的解决方法: 第一步:后台----->站长---- ...