1.O(n²)算法

定义dp[i]:以ai为结尾的最长上升子序列的长度

以ai结尾的上升子序列是:

①只包含ai的子序列

②在满足j<i并且aj<ai的以aj为结尾的上升子列末尾,追加上ai后得到的子序列

综合以上两种情况,便可以得到递推关系式:

dp[i] = max{1, dp[j]+1| j<i且aj<ai}

2.O(nlogn)算法

定义dp[i]:长度为i+1的上升子序列中末尾元素的最小值(不存在就是INF)

最开始全部dp[i]的值都初始化为INF。然后由前到后逐个考虑数列的元素,对于每个aj,如果i=0或者dp[i-1]<aj的话,就用dp[i]=min(dp[i],aj)进行更新。最终找出使得dp[i]<INF的最大的i+1就是结果了。

STL二分查找

lower_bound():

头文件: #include<algorithm>

函数模板: 如 binary_search()

函数功能:  函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置

举例如下:

一个数组number序列为:4,10,11,30,69,70,96,100.设要插入数字3,9,111.pos为要插入的位置的下标

pos = lower_bound( number, number + 8, 3) -number,pos = 0.即number数组的下标为0的位置。

pos = lower_bound( number, number + 8, 9) -number, pos = 1,即number数组的下标为1的位置(即10所在的位置)。

pos = lower_bound( number, number + 8, 111)- number, pos = 8,即number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素)。

所以,要记住:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!~

返回查找元素的第一个可安插位置,也就是“元素值>=查找值”的第一个元素的位置

upper_bound():

头文件:#include<algorithm>

函数模板: 如binary_search()

函数功能:函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于val的第一个元素位置

例如:一个数组number序列1,2,2,4.upper_bound(2)后,返回的位置是3(下标)也就是4所在的位置,同样,如果插入元素大于数组中全部元素,返回的是last。(注意:数组下标越界)

返回查找元素的最后一个可安插位置,也就是“元素值>查找值”的第一个元素的位置

注意:

         lower_bound(val):返回容器中第一个值【大于或等于】val的元素的iterator位置。

upper_bound(val): 返回容器中第一个值【大于】val的元素的iterator位置。

附:两种算法代码
第一种:复杂度为O(n^2)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<stack>
using namespace std;
const int MAX=1e6+10;int num[MAX];
int dp[MAX];int main(){int n;while(cin>>n){for(int i=0;i<n;i++)scanf("%d",&num[i]);int ans=0;for(int i=0;i<n;i++){dp[i]=1;for(int j=0;j<i;j++){if(num[i]>num[j])dp[i]=max(dp[i],dp[j]+1);}ans=max(ans,dp[i]);}cout<<ans<<endl;}return 0;
}

第二种:复杂度为O(nlogn)

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
const int MAX=1e5+10;
int num[MAX] ;
int dp[MAX];
int main(){int n;while(cin>>n){int m,cnt;for(int i=0;i<n;i++)scanf("%d",&num[i]);fill(dp,dp+n,INF);for(int i=0;i<n;i++)*lower_bound(dp,dp+n,num[i])=num[i];cout<<lower_bound(dp,dp+n,INF)-dp<<endl;}    return 0;
}

LIC(最长子序列)相关推荐

  1. 单调递增最长子序列 - 从最长公共子序列到单调递增最长子序列

    最长公共子序列 的 算法思路 在这里 点击进入  将 代码稍微改动一下 就可以   ,   最长公共子序列  是两个 字符串求 公共子序列  , 可以将其中的 一个 改为 从 a 到 z  这样输入另 ...

  2. 动态规划之-----单调递增最长子序列(nyoj17)

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

  3. 24-单调递增最长子序列(多种解法总结)

    单调递增最长子序列 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=17 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 ...

  4. C语言实现最长子序列 longest subsequence 算法(附完整源码)

    最长子序列 longest subsequence 算法 C语言最长子序列 longest subsequence 算法完整源码(定义,实现,main函数测试) C语言最长子序列 longest su ...

  5. NYOJ-单调递增最长子序列(dp)

    单调递增最长子序列 描述: 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入: 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行 ...

  6. AcWing 4489. 最长子序列

    原题链接:4489. 最长子序列 - AcWing题库 给定一个长度为 nn 的严格单调递增的整数序列 a1,a2,-,an. 序列 aa 的子序列可以表示为 ai1,ai2,-,aipai1,ai2 ...

  7. 最长子序列(LCS, LIS, LCIS)

    (一)最长公共子序列(LCS): 我们用Xi代表{x1, x2, .. , xi}, 用Yj代表{y1, y2, .. , yj}.那么,求长度分别为n,m的两个序列X, Y的LCS,就相当于求Xm与 ...

  8. 动态规划----最长子序列

    引出: 问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7-.an,求它的一个子序列(设为s1,s2,-sn),使得这个子序列满足这样的性质,s1<s2<s3<-< ...

  9. 【2389. 和有限的最长子序列】

    来源:力扣(LeetCode) 描述: 给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries . 返回一个长度为 m 的数组 answer ,其中 answer[i ...

  10. LeetCode 2389. 和有限的最长子序列

    [LetMeFly]2389.和有限的最长子序列 力扣题目链接:https://leetcode.cn/problems/longest-subsequence-with-limited-sum/ 给 ...

最新文章

  1. 剑灵总显示服务器断开连接,求解一分钟“与服务器断开连接”问题
  2. Windows Azure Cloud Service (4) Windows Azure 平台高可用性的实现
  3. 50 道 CSS 基础面试题及答案
  4. 关于NHibernate中关系表的操作
  5. react 逆地理 高德地图_高德地图又出逆天黑科技!全国各大城市模型直接获取...
  6. 【MATLAB统计分析与应用100例】案例006:matlab数据的标准化变换
  7. java 简单图片浏览器_Java实现简单的图片浏览器
  8. ESLint 在中大型团队的应用实践
  9. 手写及场景文字分析与识别的一些新尝试
  10. 加载类型库/dll时出错 的解决方法
  11. java 25 - 2 网络编程之 网络通信三要素
  12. KaliLinux-masscan使用详解(全网最快的IP端口扫描神器)
  13. vs 2005 sp1 安装失败的解决方案 安装VS2005 sp1的方法
  14. 无线通信里的 UAV
  15. mysql 2037年_Correct way to store MySQL date after year 2037
  16. 程序猿需要阅览的书籍
  17. OC 需求 检测手机是否安装某个App,app是否安装(删除)appmusic
  18. 尼基塔·丹尼诺夫《梦想者》
  19. 有线网口设备转为无线wifi,RJ45网口转wifi,即插即用,网卡转无线wifi完全透传
  20. 英特尔TCI技术落地,锐捷网络发布OCS终端云化新品

热门文章

  1. [BZOJ]4987: Tree 树形DP
  2. System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.Authe
  3. Linux命令之大文件分割
  4. ASP.NET网页响应莫明其妙反应奇慢,原来故障根源在于DNS解析冲突
  5. 爬取Bilibili视频评论,并生成云词图
  6. Xmy的第二次python(文件操作)
  7. Bootloader和Linux启动过程总结
  8. linux下查看巨杉数据库,【巨杉数据库Sequoiadb】如何查看集合空间所在的域
  9. 「弹性权重巩固(EWC/Elastic Weight Consolidation)」。
  10. 淘淘商城第30讲——实现商品添加功能