最长递增子序列 (dp)
来源:互联网 发布:linux查系统配置 编辑:程序博客网 时间:2024/05/20 16:33
给出长度为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 <= Sii <= 10^9)
Output
输出最长递增子序列的长度。
Sample Input
8
5
1
6
8
2
4
5
10
Sample Output
例如: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 <= Sii <= 10^9)
Output
输出最长递增子序列的长度。
Sample Input
8
5
1
6
8
2
4
5
10
Sample Output
5
nlogn的做法(二分)
AC代码:
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#include<string>#include<queue>#include<set>#include<vector>#include<map>#include<stack>#include<cstdlib>using namespace std;typedef long long ll;ll a[55000];ll dp[55000];int main(){int n;scanf("%d",&n);for(int i=0;i<n;i++) scanf("%lld",&a[i]); dp[0]=a[0]; int l=0,r,mid,len=1; for(int i=1;i<n;i++){ l=0; r=len; while(l<r){ mid=(l+r)/2; if(dp[mid]<a[i])l=mid+1; else r=mid; } dp[l]=a[i]; if(l>=len)len++; } printf("%d\n",len);return 0;}
阅读全文
0 0
- 最长递增子序列!!!(DP ,二分)
- 最长递增子序列(dp)
- 最长递增子序列 (dp)
- 最长递增子序列 - dp
- 最长递增子序列dp
- 最长公共子序列 最长递增子序列(和) 最长递增公共子序列 最长(连续)子序列乘积(HDU)--dp
- AOJ 189 最长递增子序列(DP)
- poj 1631Bridging signals Dp(最长递增子序列)
- NYOJ214最长单调递增子序列(DP)
- NYOJ 题目17 单调递增最长子序列 (DP)
- nyoj17单调递增最长子序列(dp)
- poj 2127 dp(最长公共递增子序列)
- POJ 1836 DP(最长递增子序列)
- NYOJ 17 单调递增最长子序列(DP)
- 51nod 1134 最长递增子序列(dp)
- nyoj 单调递增最长子序列(贪心||DP)
- nyoj17 单调递增最长子序列(dp)
- [codevs1906]最长递增子序列(dp+dinic)
- [vijos 1333]Cantor表
- 动态设置rem
- largest number
- dll和lib区别联系
- 斐波那契数列的第N项(矩阵快速幂模板)
- 最长递增子序列 (dp)
- apk减小最好用的最实际的操作
- 自定义SeekBar分段显示并填充数据pop显示当前选中位置
- java.net.BindException: 地址已在使用
- 常用PHP array数组函数
- [RevitSDK解读]UIAPI->PreviewModel:在自己的界面显示Revit视图
- Anaconda TensorFlow安装(Windows10 64位 gpu) 完整版(大马哈鱼)
- 流程的Python 第十一章:接口:从协议到抽象基类
- robotframework相关资料 及其他测试相关资料