一,    最长递增子序列问题的描述

  设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1<k2<…<km且aK1<ak2<…<akm。求最大的m值。

 

二,算法:动态规划法:O(n^2)
  设f(i)表示L中以ai为末元素的最长递增子序列的长度。则有如下的递推方程:

  这个递推方程的意思是,在求以ai为末元素的最长递增子序列时,找到所有序号在L前面且小于ai的元素aj,即j<i且aj<ai。如果这样的元素存在,那么对所有aj,都有一个以aj为末元素的最长递增子序列的长度f(j),把其中最大的f(j)选出来,那么f(i)就等于最大的f(j)加上1,即以ai为末元素的最长递增子序列,等于以使f(j)最大的那个aj为末元素的递增子序列最末再加上ai;如果这样的元素不存在,那么ai自身构成一个长度为1的以ai为末元素的递增子序列。一般在解决问题的时候都是用到动态规划.

NYOJ 17 http://acm.nyist.net/JudgeOnline/problem.php?pid=17

单调递增最长子序列

时间限制:3000 ms  |  内存限制:65535 KB
难度:4

描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7

 1
 2 #include<stdio.h>
 3 #include<string.h>
 4 int main()
 5 {
 6     int a[10010],i,j,n;
 7     char s[10001];
 8     scanf("%d",&n);
 9     while(n--)
10     {
11         scanf("%s",s);
12         int max,len=strlen(s);
13         for(i=0;i<len;i++)
14         a[i]=1;
15         for(i=1;i<len;i++)
16         {
17             max=0;
18             for(j=0;j<i;j++)
19             {
20                 if(s[j]<s[i]&&max<a[j])
21                 {
22                     max=a[j];
23                 }
24             }
25             a[i]=max+1;
26         }
27         max=a[0];
28         for(i=0;i<len;i++)
29         {
30             if(a[i]>max)
31             max=a[i];
32         }
33         printf("%d\n",max);
34     }
35     return 0;
36 }        

View Code

NYOJ 79 http://acm.nyist.net/JudgeOnline/problem.php?pid=79

描述

某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度。某天,雷达捕捉到敌国导弹来袭。由于该系统还在试用阶段,所以只用一套系统,因此有可能不能拦截所有的导弹。

输入
第一行输入测试数据组数N(1<=N<=10)
接下来一行输入这组测试数据共有多少个导弹m(1<=m<=20)
接下来行输入导弹依次飞来的高度,所有高度值均是大于0的正整数。
输出
输出最多能拦截的导弹数目
样例输入
2
8
389 207 155 300 299 170 158 65
3
88 34 65
样例输出
6
2

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5     int f[100],i,j,n,a[100],max;
 6     scanf("%d",&n);
 7     while(n--)
 8     {
 9         int t;
10         scanf("%d",&t);
11         for(i=0;i<t;i++)
12         scanf("%d",&a[i]);
13         f[0]=1;
14         for(i=1;i<t;i++)
15         {
16             max=0;
17             for(j=0;j<i;j++)
18             {
19                 if(a[j]>a[i]&&max<f[j])
20                 {
21                     max=f[j];
22                 }
23             }
24             f[i]=max+1;
25         }
26         max=f[0];
27         for(i=0;i<t;i++)
28         {
29             if(f[i]>max)
30             max=f[i];
31         }
32         printf("%d\n",max);
33     }
34     return 0;
35 }

View Code

转载于:https://www.cnblogs.com/zeze/p/lcmzixunlie.html

最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹相关推荐

  1. NYOJ 17 单调递增最长公共子序列

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行 ...

  2. NYOJ 214 单调递增子序列(二)

    单调递增子序列(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长子序 ...

  3. NYOJ 79 拦截导弹

    拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任 ...

  4. LeetCode 673. 最长递增子序列的个数(DP)

    1. 题目 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, ...

  5. 最长上升子序列 (LIS) 详解+例题模板 (全)

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/-萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗- ------------ ...

  6. LIS最长上升子序列详解(动态规划、贪心+二分、树状数组)

    1.摘要: 关于LIS部分,本篇博客讲一下LIS的概念定义和理解,以及求LIS的三种方法,分别是O(n^2)的DP,O(nlogn)的二分+贪心法,以及O(nlogn)的树状数组优化的DP,最后附上几 ...

  7. 动态规划作业 最长单调递增子序列

    动态规划作业 1.最长单调递增子序列 设计一个 O(n2)时间的算法,找出由 n 个数组成的序列 a 的最长单调递增子序列. 提示: 用数组 b[0:n]纪录以 a[i] (0<= i< ...

  8. 5-3 最长连续递增子序列 (20分)

    5-3 最长连续递增子序列 (20分) 给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列.例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8 ...

  9. 程序员面试100题之十二:求数组中最长递增子序列

    写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度. 例如:在序列1,-1,2,-3,4,-5,6,-7中,其最长递增子序列为1,2,4,6. 分析与解法 根据题目要求, ...

最新文章

  1. HOGDescriptor 描述类
  2. 王者荣耀活动精选 Blink 第三弹来袭!
  3. Ardino基础教程 25_8X8LED点阵
  4. loadrunner脚本练习
  5. idea 添加静态注释和live Templates
  6. include_fns.php_管理页面
  7. SQLite | Case 子句
  8. linux wc read,Linux 下使用 wc 统计文件夹下所有文件的代码行数(包括子目录)-Go语言中文社区...
  9. 触发器与job的配合使用oracle,oracle 对象管理 10_触发器job
  10. 重磅:《Python可以这样学》正式出版
  11. Android:Day03_完美登录案例(使用流和文件来保存登录信息)
  12. BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
  13. 【渝粤教育】国家开放大学2018年春季 0221-22T数字电子电路 参考试题
  14. unity update 协程_[转载]【转载】unity3D中使用协程来做“多次调用一次更新”特性的一个大坑。...
  15. 指数函数曲线拟合问题c语言,求助用指数函数拟合一组数据
  16. MacTeX添加.sty文件
  17. Java流程控制相关知识(四)
  18. Git版本控制管理——diff
  19. android MediaCodec 音频编解码的实现——转码
  20. Paper之CVPRICCVECCV:2009年~2019年CVPRICCVECCV(国际计算机视觉与模式识别会议国际计算机视觉大会欧洲计算机视觉会议)历年最佳论文简介及其解读

热门文章

  1. React Hook的用法: State + Effect(一)
  2. The Part-Time Parliament
  3. linux对电子信息工程专业的意义,电子信息工程专业的学生应该考哪些必要的资格证书? (1)...
  4. mysql数据库实体_关系型数据库中实体之间的关系
  5. IDC 基础设施包括哪些,它们的用途?
  6. linux php验证码,openwrt路由器搭建PHP并用PHP识别验证码
  7. DDD 领域概念字典
  8. 前「元宇宙」时代,谷歌VR是怎么失败的
  9. 使用Github Actions自动部署vue项目到nginx服务器
  10. linux 25端口漏洞,Linux通过栈溢出进行提权实战(dpwwn03)