51nod 1134 最长递增子序列
来源:互联网 发布:淘宝网登录首页官网 编辑:程序博客网 时间:2024/05/22 12:16
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1134
普通dp的时间复杂度是O(n2),肯定会超时,采用dp+二分的方法,可以优化到O(nlogn)。
例如上面的序列: i为序列下标
i=0 d[1]=5 i=1 d[1]=1 (1<d[1]) i=2 d[2]=6 (6>d[1]) i=3 d[3]=8 (8>d[2]) i=4 d[2]=2 (2<d[2]) i=5 d[3]=4 (4<d[3]) i=6 d[4]=5 (5>d[3]) i=7 d[5]=10 (10>d[4])
最终得到 最长序列为 5。*
#include<iostream>#include<stdio.h>#define max1 50005using namespace std;int d[max1]; //d[i]表示长度为i时,值最小的元素int main(){ int n,val,len=0; cin>>n; for(int x=0;x<n;x++) { scanf("%d",&val); //val为序列元素 if(x==0) d[++len]=val; if(val>d[len]) d[++len]=val; //如果大于d[len],直接更新len和d[len] else { int left=1,right=len; while(left<=right) //二分查找 { int mid=(left+right)/2; if(d[mid]<val) left=mid+1; else right=mid-1; } d[left]=val; //找到第一个大于val的元素位置 } } cout<<len;}
阅读全文
0 0
- 51nod 1134 最长递增子序列
- 51nod 1134 最长递增子序列
- 51nod 1134 最长递增子序列
- [51nod]1134 最长递增子序列
- 51nod 1134 最长递增子序列
- 51Nod 1134 最长递增子序列
- 51nod 1134最长递增子序列
- 51nod 1134 最长递增子序列
- 51Nod 1134 最长递增子序列
- 【51nod】1134 最长递增子序列
- 51Nod-1134 最长递增子序列
- 51nod 1134 最长递增子序列
- 51 nod 1134 最长递增子序列
- 51Nod-1134-最长递增子序列
- 51nod 1134 最长递增子序列
- 51Nod-1134 最长递增子序列
- 51nod--1134 最长递增子序列
- 51nod 1134最长递增子序列
- Java异常处理
- linux基本服务之sshd
- Python:把二叉树打印成多行
- Linux源码安装Gitblit
- win32控制台应用程序不显示窗口启动
- 51nod 1134 最长递增子序列
- stl-vector
- 总结Java基础第二章
- Linux源码安装JDK1.8
- struts2
- 关于前端学习规划
- 深度学习之工具篇:TensorFlow安装
- 浏览器查询参数与表单数据的优先级问题
- Centos下git环境搭建