LIS(最大上升子序列)
代码实现如下:
#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(最大上升子序列)相关推荐
- 记录结果再利用的动态规划
01背包问题 问题描述:有n个重量和价值分别为wi.vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值. 限制条件: 1≤n≤100 1≤wi.vi≤100 1≤W≤ ...
- 动态规划系列问题—从小白到大佬的入门、进阶之旅!!!
前言 本篇文章写了将近一万五千字,整理了关于动态规划系列问题的绝大部分分支,包括动态规划的介绍,相关术语等基础内容,也有区间DP,状压DP等进阶知识. 不管你是刚学习该算法的小白,还是对该算法有了一定 ...
- 北邮考研复试机试准备过程(已上岸)
纯自用请勿转载,用来给自己最后复习和捋思路用的,主要参考牛客网+王道机试指南,C.C++混用.考研人太久不写代码了-什么都不记得了,从头开始过一遍吧. 黑色代码段是要记住的重点函数/方法.每天下午做几 ...
- HDU 2020 多校第七场 游记
又是被 djq 带飞的一场 orz,终场 rk2,又是罚时被锤了 1001,1002 俩 hard 先略过,不会做 /ll 1003 这种数数神题被 djq 一眼秒了,我还能说什么-- 首先我们考虑合 ...
- 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我)
目录 最长公共子序列(LCS)问题 1.朴素做法 O(n2)O(n^2)O(n2) 2.转换成LIS优化O(nlogn)O(nlogn)O(nlogn) 3.P2758 编辑距离 最长公共子序列(LC ...
- 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)
目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...
- LCS最长公共子序列和LIS最长上升子序列——例题剖析
一.LCS最长公共子序列 最长公共子序列(LCS)问题算法详解+例题(转换成LIS,优化为O(nlogn),看不懂你来打我) longest comment subsequence 模板题 longe ...
- 最长上升子序列(LIS)长度及其数量
例题51Nod-1376,一个经典问题,给出一个序列问该序列的LIS以及LIS的数量. 这里我学习了两种解法,思路和代码都是参考这两位大佬的: https://www.cnblogs.com/reve ...
- Leetcode1713. 得到子序列的最少操作次数[C++题解]:LCS转化成LIS,转化为nlogn做法
文章目录 本题分析 题目链接 本题分析 本题难在问题转换上. [问题转化1]转化为求两个序列最长公共子序列(LCS)的长度. 然后target 的长度减去 公共子序列的长度,就是答案. 本题数据规模是 ...
- 最长上升子序列(LIS) nlogn解法
文章目录 经典DP解法O(n^2) dp+二分法(O(nlogn)) 最长上升子序列LIS:Longest increasing subsequence 题目链接:Leetcode300. 最长递增子 ...
最新文章
- python3实用编程技巧_适合Python初学者的一些编程技巧
- mysql读取sql脚本_Pandas直接读取sql脚本的方法
- 瑞斯康达nms_瑞斯康达iTN产品资料
- 矩阵存储 oracle表,二种矩阵存储方式汇总比较
- Dom4j完整教程~字符串与XML的转换
- [BZOJ3238][AHOI2013]差异 [后缀数组+单调栈]
- oracle10.2.0.4 dbca,在rhel5上oracle 10.2.0.4 上dbca silent删除数据库
- 机器学习代码实战——朴素贝叶斯(实现垃圾邮件分类)
- win10软件拒绝访问删不掉_谷歌工程师正在解决Windows 10防病毒软件导致谷歌浏览器不稳定问题...
- Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群结构
- CSS学习总结(2)——选择器
- Writing Serializable Classes---定义可序列化的类
- 修改Console口登录密码
- Google SketchUp Cookbook: (Chapter 3) Intersection Edges: Cutting and Trimming
- 关于win10中将中文用户名更改为英文名的解决方法
- Apache Drill详解
- Mybase7延长试用期
- 大连理工版小学计算机教案,大连理工版小学信息技术教案
- 微信公众平台订阅号如何升级转换为服务号?
- 吐血分享!这几个在线网站超劲爆,福利满满