51nod1134 最长递增子序列【动态规划】
给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)
例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。
Input
- 第1行:1个数N,N为序列的长度(2 <= N <= 50000)
- 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)
Output
- 输出最长递增子序列的长度。
Input示例
- 8
- 5
- 1
- 6
- 8
- 2
- 4
- 5
- 10
Output示例
- 5
思路:这题只能用nlogn的复杂度来做,n2的会超时。
#include<iostream>
#include<cstdio>
using namespace std;
int arr[50005];
int BinarySearch(int *arr,int value,int len)
{
int begin =0,end=len-1;
while(begin<=end)
{
int mid=begin+(end-begin)/2 ;
if(arr[mid]==value)
return mid;
else if(arr[mid]>value)
end=mid-1;
else
begin=mid+1;
}
return begin;
}
int LIS(int *arr,int len)
{
int a[len],n=1;
a[0]=arr[0];
for(int i=1;i<len;++i)
{
if(arr[i] > a[n-1])
{
a[n]=arr[i];
++n;
}
else
{
int pos = BinarySearch(a,arr[i],n);
a[pos]=arr[i];
}
}
return n;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",&arr[i]);
printf("%d\n",LIS(arr,n));
return 0;
}
51nod1134 最长递增子序列【动态规划】的更多相关文章
- 51nod--1134 最长递增子序列 (动态规划)
题目: 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行: ...
- 300. Longest Increasing Subsequence(LIS最长递增子序列 动态规划)
Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...
- 51nod-1134 最长递增子序列,用线段树将N^2的dp降到NlogN
题目链接 给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行 ...
- 51nod1134(最长递增子序列)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1134 题意: 中文题诶~ 思路: 直接暴力的话时间复杂度为 ...
- 动态规划 - 最长递增子序列(LIS)
最长递增子序列是动态规划中经典的问题,详细如下: 在一个已知的序列{a1,a2,...,an}中,取出若干数组组成新的序列{ai1,ai2,...,aim},其中下标i1,i2,...,im保持递增, ...
- 【动态规划】拦截导弹_dilworth定理_最长递增子序列
问题 K: [动态规划]拦截导弹 时间限制: 1 Sec 内存限制: 256 MB提交: 39 解决: 10[提交][状态][讨论版] 题目描述 张琪曼:“老师,修罗场是什么?” 墨老师:“修罗是 ...
- 动态规划----最长递增子序列问题(LIS)
题目: 输出最长递增子序列的长度,如输入 4 2 3 1 5 6,输出 4 (因为 2 3 5 6组成了最长递增子序列). 暴力破解法:这种方法很简单,两层for循环搞定,时间复杂度是O(N2). 动 ...
- 算法之动态规划(最长递增子序列——LIS)
最长递增子序列是动态规划中最经典的问题之一,我们从讨论这个问题开始,循序渐进的了解动态规划的相关知识要点. 在一个已知的序列 {a1, a 2,...an}中,取出若干数组成新的序列{ai1, ai ...
- 51Nod - 1134 最长递增子序列【动态规划】
给出长度为N的数组,找出这个数组的最长递增子序列.(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10. Input 第1行:1个数N ...
随机推荐
- CF #EDU R1 E
最二的一次了~我开始以为是带有贪心的DP,谁知道想错了.后来才想明白,暴力二分+记忆化DP #include <iostream> #include <cstdio> #inc ...
- C语言之文件操作07——读取文件数据并计算均值方差标准差
//文件 /* =============================================================== 题目:从文本文件"high.txt" ...
- Rust 中项目构建管理工具 Cargo简单介绍
cargo是Rust内置的项目管理工具.用于Rust 项目的创建.编译.执行,同一时候对项目的依赖进行管理,自己主动推断使用的第三方依赖库,进行下载和版本号升级. 一.查看 cargo 版本号 安装R ...
- 记录cocos2d-x3.0版本号更改内容官方说明
http://www.cocos2d-x.org/wiki/Release_Notes_for_Cocos2d-x_v300
- C++源码实现:21种常用设计模式
C++源码实现:21种常用设计模式一直以来在设计模式的学习中,都是出现java的源码,这对学习C++的极度不友好.本工程是基于C++实现21种常用的设计模式,里面包含了实例代码和示例.编写的时候在学习 ...
- Android系统Recovery工作原理之使用update.zip升级过程分析(七)---Recovery服务的核心install_package函数【转】
本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465514 一. Recovery服务的核心install_package(升级 ...
- javascript 将变量值作为对象属性 获取对象对应的值
例子 var var="name"; var objname="obj"; objname=objname+"."+var; alert(e ...
- bzoj3957
数学+模拟 细节很多 首先我们发现,如果两个区间已经包含,那么可以输出empty,一个数能通过变换得到另一个区间的数,这个区间的大小必须小于等于终点区间的大小.加法不会改变区间大小,只有乘法会改变,而 ...
- Oracle创建用户教程
计算机-->管理-->应用程序与服务-->(OracleOraDb11g_home1TNSListener 和 OracleServiceORCL 服务)->启动服务 打开Or ...
- 手机网站下拉加载数据js(简单版)
加载内容的地方html <div class="bgcolor_f0 clearfix"> <div class="recharge"> ...