序:
LCIS即求两序列的最长公共不下降子序列。思路于LCS基本一致。

用dp[i][j]记录当前最大值。


代码实现:

/*
About: LCIS O(mn)
Auther: kongse_qi
Date:2017/04/26
*/
#include <bits/stdc++.h>
#define maxn 505
using namespace std; int n, m, a[maxn], b[maxn]; void Init()
{
scanf("%d%d", &n, &m);
for(unsigned i = 0; i != n; ++i)
{
scanf("%d", &a[i]);
}
for(unsigned i = 0; i != m; ++i)
{
scanf("%d", &b[i]);
}
return ;
} int Lcis()
{
int maxx, dp[maxn][maxn], ans = 0;
for(unsigned i = 1; i != n+1; ++i)
{
maxx = 0;
for(unsigned j = 0; j != m; ++j)
{
dp[i][j] = dp[i-1][j];
if(a[i-1] > b[j])
{
maxx = max(dp[i-1][j], maxx);
}
if(a[i-1] == b[j])
{
dp[i][j] = maxx+1;
maxx = max(maxx, dp[i-1][j]);
}
}
}
for(unsigned i = 0; i != m; ++i)
{
ans = max(ans, dp[n][i]);
}
return ans;
} int main()
{
//freopen("test.in", "r", stdin); Init();
cout << Lcis();
return 0;
}

空间也是O(n^2),仔细阅读则会发现依然可以滚动数组,是空间复杂度降到O(n)。
与LCS的方式完全一致。

int Lcis()
{
int maxx, dp[2][maxn], ans = 0;
memset(dp, 0, sizeof dp);
for(unsigned i = 1; i != n+1; ++i)
{
maxx = 0;
for(unsigned j = 0; j != m; ++j)
{
dp[i&1][j] = dp[(i&1)^1][j];
if(a[i-1] > b[j])
{
maxx = max(dp[(i&1)^1][j], maxx);
}
if(a[i-1] == b[j])
{
dp[i&1][j] = maxx+1;
maxx = max(maxx, dp[(i&1)^1][j]);
}
}
}
for(unsigned i = 0; i != m; ++i)
{
ans = max(ans, dp[n&1][i]);
}
return ans;
}

但是这么做要注意,当你开的数组不是全局变量的时候一定要先memset为0,否则会出现一些神奇的情况。
(第一次调用的a[(i&1)^1][j]的值是系统的随机值,但是应该是0)

至此结束。
箜瑟_qi 2017.04.26

O(mn)实现LCIS的更多相关文章

  1. LCIS POJ 2172 Greatest Common Increasing Subsequence

    题目传送门 题意:LCIS(Longest Common Increasing Subsequence) 最长公共上升子序列 分析:a[i] != b[j]: dp[i][j] = dp[i-1][j ...

  2. LIS && LCS && LCIS && LPS && MCS模板

    1. LIS (Longest Increasing Subsequence) O (n^2): /* LIS(Longest Increasing Subsequence) 最长上升子序列 O (n ...

  3. 【CF10D】LCIS(LCIS)

    题意:求两个序列的LCIS n,m<=300,a[i]<=1e9 题意:O(n^2) O(n^3)的话设dp[i,j]为A终点为a[1..i]且B终点为b[j]的最大长度,分a[i]==b ...

  4. BestCoder Round #87 1003 LCIS[序列DP]

    LCIS  Accepts: 109  Submissions: 775  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 65536/65 ...

  5. LCIS(最长公共上升子序列)Vijos1264神秘的咒语

    描述 身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底. 据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法 ...

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

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

  7. hdu-5904 LCIS(水题)

    题目链接: LCIS Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. LCIS HDOJ 4512 吉哥系列故事——完美队形I

    题目传送门 题意:中文题面 分析:LCIS应用:设置b[]为a[]的反转,然后LCIS,若相等的是自己本身,则+1, 否则+2 代码: #include <cstdio> #include ...

  9. LIS+LCS+LCIS

    PS:本篇博文均采用宏#define FOR(i, a, n) for(i = a; i <= n; ++i) LIS:最长上升子序列 废话不多说:http://baike.baidu.com/ ...

随机推荐

  1. c#关于时间TimeHelper类的总结

    using System; namespace DotNet.Utilities{    /// <summary>    /// 时间类    /// 1.SecondToMinute( ...

  2. MyBatis解决字段名与实体类属性名不相同的冲突(四)

    一.创建表和表数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no ), order_price FLOA ...

  3. Sublime Text 3常用插件

    操作:按下Ctrl+Shift+P调出命令面板 输入install 调出 Install Package 选项并回车,然后在列表中选中要安装的插件. 常用插件: 1---- Bracket Highl ...

  4. 2017年要学习的JavaScript的顶级框架和主题

    JavaScript的流行促进了一个非常活跃的由相关技术,框架和库组成的生态圈的发展.整个生态圈的多样性和活跃性越来越强,这让许多人变得越来越困惑. 你应该了解些什么技术呢?   我们应该将时间花费在 ...

  5. 利用NSURLSession下载视频,图片,能实现断点续传

    首先分析下载资源到本地,就得有URL ,点击btn ,就会解析网络地址,获取数据,就得有进度条控件 NSURLSession类的实现,通过委托代理模式去实现一些方法,需遵守<NSURLSessi ...

  6. String 类的实现(1)浅拷贝存在的问题

    浅拷贝 : 也称位拷贝 , 编译器只是直接将指针的值拷贝过来, 结果多个对象共用 同 一块内 存, 当一个对象将这块内 存释放掉之后, 另 一些对象不知道该块空间 已经还给了 系 统, 以 为还有效, ...

  7. 面向对象的三大特征——封装、继承、多态(&常用关键字)

    一.封装 Encapsulation 在面向对象程式设计方法中,封装是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装的概念(针对服务器开发,保护内部,确保服务器不出现问题) 将类的 ...

  8. 编写你的第一个程序(HelloWorld)

    1)安装. 2)打开我们的编译工具Xcode,会出现一些选项,我们只需要选中第2项(因为版本不同可能有些不同)“Create a new Xcode project ”如下图(其他的选项目前我们还没有 ...

  9. Poptest学员之当小厨师变成测试开发工程师

    没开玩笑,这是我们的真实案例.做培训以来,各行各业转行做测试的学员见得太多了.修车的.客服的.销售的.司机的.医护的.前台的等等.职位虽然不分贵贱,但是薪资却分多少.每个人心中都有让家人和自己过上好日 ...

  10. Linux之shell编程条件判断-if,while,for,case

    if 语法格式 if condition then statements [elif condition then statements] [else statements ] fi 示例 vi if ...