JDOJ 1929: 求最长不下降序列长度

JDOJ传送门

Description

设有一个正整数的序列:b1,b2,…,bn,对于下标i1<i2<…<im,若有bi1≤bi2≤…≤bim

则称存在一个长度为m的不下降序列。

现在有n个数,请你求出这n个数的最长不下降序列的长度

Input

第一行为一个整数n (n < 104)

第二行有n个整数,数与数之间使用空格间隔

Output

输出一行,一个整数,最长不下降序列的长度

Sample Input

14 13 7 9 16 38 24 37 18 44 19 21 22 63 15

Sample Output

8

HINT

样例解释:

最长的不下降序列

7<9<16<18<19<21<22<63

题解:

最长不降子序列问题是线性动归的基础题。

因为它很基础,所以我在这里详讲一下。

我们的最长不降子序列的选择并不一定是连续的,这是这个问题的求解基础。也就是说,我们在进行判断是否进行动归的时候,需要从头再扫描,对枚举到的元素之前的每一个元素进行遍历动归。

可能会比较抽象,但是代码还是比较好实现的,没有看懂讲解的可以结合代码理解。

求解最长不降子序列问题的这种\(O(n^2)\)的做法在一些题目中会被卡数据范围。所以我们又有了二分优化及一些其他的优化方式,在这里就不详细介绍,请有兴趣有能力的同学们自行查阅。

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e4+10;
int n,ans;
int a[maxn],dp[maxn];//dp[i]表示以i结尾的最长不降序列长度
//dp[i]=max(dp[j]+1);
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
dp[i]=1;
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
if(a[j]<=a[i])
dp[i]=max(dp[i],dp[j]+1);
ans=max(ans,dp[i]);
}
printf("%d",ans);
return 0;
}

JDOJ 1929: 求最长不下降序列长度的更多相关文章

  1. 算法复习——求最长不下降序列长度(dp算法)

    题目: 题目背景 161114-练习-DAY1-AHSDFZ T2 题目描述 有 N 辆列车,标记为 1,2,3,…,N.它们按照一定的次序进站,站台共有 K 个轨道,轨道遵从先进先出的原则.列车进入 ...

  2. 问题 B: 【例9.3】求最长不下降序列(基础dp)

    问题 B: [例9.3]求最长不下降序列 时间限制: 1 Sec  内存限制: 128 MB提交: 318  解决: 118[提交][状态][讨论版][命题人:quanxing] 题目描述 设有由n( ...

  3. JDOJ 1946 求最长不下降子序列个数

    Description 设有一个整数的序列:b1,b2,…,bn,对于下标i1<i2<…<im,若有bi1≤bi2≤…≤bim 则称存在一个长度为m的不下降序列. 现在有n个数,请你 ...

  4. hdu 3308 线段树,单点更新 求最长连续上升序列长度

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. [BZOJ1852] [MexicoOI06]最长不下降序列

    [BZOJ1852] [MexicoOI06]最长不下降序列 额我也不知道是不是水过去的...和网上的另一篇题解对拍过了,但是拍不出来... 经过和神仙的讨论基本可以确定是对的了 考虑如下贪心 (我将 ...

  6. 算法进阶 (LIS变形) 固定长度截取求最长不下降子序列【动态规划】【树状数组】

    先学习下LIS最长上升子序列 ​ 看了大佬的文章OTZ:最长上升子序列 (LIS) 详解+例题模板 (全),其中包含普通O(n)算法*和以LIS长度及末尾元素成立数组的普通O(nlogn)算法,当然还 ...

  7. P1020 导弹拦截(nlogn求最长不下降子序列)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  8. 九度OJ 1131:合唱队形 (DP、最长上升下降序列)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2865 解决:881 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. ...

  9. 最长不下降序列nlogn算法

    显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...

随机推荐

  1. oracle存储过程中循环游标,变量的引用

    创建出错时使用: show errors查看具体的错误提示 一. 存储过程中的一个循环及变量引用示例: create or replace procedure my_proiscursor cur i ...

  2. wcf callback在主线程被调用

    记得当时往wcf迁移了部分service以后,tester发现有时候系统会没有任何反应,cpu占用倒是没有问题,可就是做不了事情. 感觉是哪里死锁了,但也不是每次都能再现,后来发现如果把callbac ...

  3. babel速览

    babel babel初衷 在es6出现之后,由于此版本的巨大改变,给人们带来了很多革命性的技术支持,但是当时很多浏览器对es6支持有限,babel就是为了达到写最新的语法,可以在任意浏览器运行而出现 ...

  4. PHP匿名函数的写法

    传统写法<pre>function timer () { echo "hello world";}Swoole\Timer::tick(2000, 'timer');& ...

  5. 使用Vue-cli3搭建Vue+TypeScript项目

    一,创建项目 使用 npm 安装 vue-cli 3 和typescript npm i -g @vue/cli typescript 使用vue create命令快速搭建新项目的脚手架 vue cr ...

  6. python yield from (二)

    #pep380 #1. RESULT = yield from EXPR可以简化成下面这样 #一些说明 """ _i:子生成器,同时也是一个迭代器 _y:子生成器生产的值 ...

  7. Spring Cloud 新一代Web框架微服务翘楚(一)

    序言 springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合.基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易. 通过一些简单的注解,我们就可以快速的 ...

  8. 【题解】Puzzle [Uva1399]

    [题解]Puzzle [Uva1399] 传送门:\(\text{Puzzle [Uva1399]}\) [题目描述] 给定 \(m\) 和 \(n\),表示有 \(m\) 种不同的字符(大写字母\( ...

  9. Enum.GetUnderlyingType(obj.GetType())

    Enum.GetUnderlyingType(obj.GetType())获取保存枚举值的数据类型:

  10. rsync性能终极优化【Optimize rsync performance】

    前言 将文件从一台计算机同步或备份到另一台计算机的快速简便的方法是使用rsync.我将介绍通常用于备份数据的命令行选项,并显示一些选项以极大地将传输速度从大约20-25 MB / s加快到90 MB ...