代码实现如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{int arr[500], n, dp[500], ans = -1;scanf("%d", &n);for(int i = 1; i <= n; i++)scanf("%d", &arr[i]); for(int i = 1; i <= n; i++){dp[i] = 1; //初始化for(int j = 1; j < i; j++){if(arr[j] < arr[i]) // 如果求最大下降子序列则反之dp[i] = max(dp[i], dp[j] + 1);}ans = max(dp[i], ans);}/* ********************************************** */printf("最长子序列的个数为: %d", ans);return 0;
}

可进行优化,优化后代码为:

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=1000+10;
int dp[maxn],ans[maxn];int b_search(int x,int s,int len)
{while(s<len){int mid=s+(len-s)/2;if(dp[mid]>=x){len=mid;}else{s=mid+1;    }}return s;
}int main()
{int n;while(~scanf("%d",&n)&&n){memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++){scanf("%d",&ans[i]);}int len=1;dp[1]=ans[1];for(int i=2;i<=n;i++){if(ans[i]>dp[len]){dp[++len]=ans[i];}else{int p=b_search(ans[i],1,len);dp[p]=ans[i];}}for(int i=1;i<=len;i++){cout<<dp[i]<<" ";}cout<<endl;}
}

转载于:https://www.cnblogs.com/KasenBob/p/10449878.html

LIS(最大上升子序列)相关推荐

  1. 记录结果再利用的动态规划

    01背包问题 问题描述:有n个重量和价值分别为wi.vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值. 限制条件: 1≤n≤100 1≤wi.vi≤100 1≤W≤ ...

  2. 动态规划系列问题—从小白到大佬的入门、进阶之旅!!!

    前言 本篇文章写了将近一万五千字,整理了关于动态规划系列问题的绝大部分分支,包括动态规划的介绍,相关术语等基础内容,也有区间DP,状压DP等进阶知识. 不管你是刚学习该算法的小白,还是对该算法有了一定 ...

  3. 北邮考研复试机试准备过程(已上岸)

    纯自用请勿转载,用来给自己最后复习和捋思路用的,主要参考牛客网+王道机试指南,C.C++混用.考研人太久不写代码了-什么都不记得了,从头开始过一遍吧. 黑色代码段是要记住的重点函数/方法.每天下午做几 ...

  4. HDU 2020 多校第七场 游记

    又是被 djq 带飞的一场 orz,终场 rk2,又是罚时被锤了 1001,1002 俩 hard 先略过,不会做 /ll 1003 这种数数神题被 djq 一眼秒了,我还能说什么-- 首先我们考虑合 ...

  5. 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)

    目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...

  6. 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)

    目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...

  7. LCS最长公共子序列和LIS最长上升子序列——例题剖析

    一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...

  8. 最长上升子序列(LIS)长度及其数量

    例题51Nod-1376,一个经典问题,给出一个序列问该序列的LIS以及LIS的数量. 这里我学习了两种解法,思路和代码都是参考这两位大佬的: https://www.cnblogs.com/reve ...

  9. Leetcode1713. 得到子序列的最少操作次数[C++题解]:LCS转化成LIS,转化为nlogn做法

    文章目录 本题分析 题目链接 本题分析 本题难在问题转换上. [问题转化1]转化为求两个序列最长公共子序列(LCS)的长度. 然后target 的长度减去 公共子序列的长度,就是答案. 本题数据规模是 ...

  10. 最长上升子序列(LIS) nlogn解法

    文章目录 经典DP解法O(n^2) dp+二分法(O(nlogn)) 最长上升子序列LIS:Longest increasing subsequence 题目链接:Leetcode300. 最长递增子 ...

最新文章

  1. python3实用编程技巧_适合Python初学者的一些编程技巧
  2. mysql读取sql脚本_Pandas直接读取sql脚本的方法
  3. 瑞斯康达nms_瑞斯康达iTN产品资料
  4. 矩阵存储 oracle表,二种矩阵存储方式汇总比较
  5. Dom4j完整教程~字符串与XML的转换
  6. [BZOJ3238][AHOI2013]差异 [后缀数组+单调栈]
  7. oracle10.2.0.4 dbca,在rhel5上oracle 10.2.0.4 上dbca silent删除数据库
  8. 机器学习代码实战——朴素贝叶斯(实现垃圾邮件分类)
  9. win10软件拒绝访问删不掉_谷歌工程师正在解决Windows 10防病毒软件导致谷歌浏览器不稳定问题...
  10. Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群结构
  11. CSS学习总结(2)——选择器
  12. Writing Serializable Classes---定义可序列化的类
  13. 修改Console口登录密码
  14. Google SketchUp Cookbook: (Chapter 3) Intersection Edges: Cutting and Trimming
  15. 关于win10中将中文用户名更改为英文名的解决方法
  16. Apache Drill详解
  17. Mybase7延长试用期
  18. 大连理工版小学计算机教案,大连理工版小学信息技术教案
  19. 微信公众平台订阅号如何升级转换为服务号?
  20. 吐血分享!这几个在线网站超劲爆,福利满满

热门文章

  1. java基础学习(一)方法
  2. 让一个 csproj 项目指定多个开发框架
  3. Python 3.x print 小结
  4. SQL语句将某字段查询出以逗号隔开
  5. 【转】CreateWindowEx异常原因汇总
  6. 分布式检索系统的简单设计
  7. Java学习日记----反射
  8. JAVA基础--JAVA中的反射机制详解
  9. 《TCP/IP详解》
  10. 斐波那契数列——递归算法