LIS最长上升子序列模板
来源:互联网 发布:mysql存放byteImage 编辑:程序博客网 时间:2024/05/17 04:42
O(n^2)的方法:
#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>using namespace std; int a[15010],dp[15010];int n; inline void ir(){ cin>>n; return;} int main(){ ir(); int maxn=0; for(int i=1;i<=n;i++)dp[i]=1; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); for(int j=1;j<i;j++) if(a[j]<a[i]) dp[i]=max(dp[i],dp[j]+1); maxn=max(maxn,dp[i]); } cout<<maxn; return 0;}O(n log n)的方法:
#include <cstdio>#include <algorithm>using namespace std; int n,a[20010];int c[20010];int len=0; int find(int x){ int l=1,r=len,mid; while(l<=r) { mid=(l+r)>>1; if(x>c[mid])l=mid+1; //记忆方法:求上升序列,就表示x更大,那么就是大于 else r=mid-1; } return l;} int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++) { int k=find(a[i]); c[k]=a[i]; len=max(len,k); } printf("%d",len); return 0;}
注:第一种可以找出序列本身,第二种只能找出其个数
1 0
- LIS(最长上升子序列)算法 -------模板
- LIS(最长上升子序列)模板
- LIS最长上升子序列模板
- 最长上升子序列LIS模板
- 最长上升子序列模板(LIS)
- 最长上升子序列LIS
- 最长上升子序列LIS
- 最长上升子序列(LIS)
- 最长上升子序列 LIS
- 最长上升子序列(LIS)
- LIS最长上升子序列
- 最长上升子序列 LIS
- 最长上升子序列LIS
- LIS最长上升子序列
- 最长上升子序列LIS
- LIS 最长上升子序列
- 最长上升子序列LIS
- LIS(最长上升子序列)
- HDU1232 畅通工程【并查集】
- MyBatis使用@MapKey注解接收多个查询记录到Map中,以便方便地用get()方法获取字段的值
- tomact
- HBase-5.提高HBase客户端的读写性能方法
- 音乐播放器单例
- LIS最长上升子序列模板
- Matlab里面的指针
- 轮播图封装
- Elasticsearch过滤与聚合的先后顺序java实现
- 仿美团外卖效果
- java类的生命周期分析
- 【quick-cocos2d-x】Lua 面向对象(OOP)编程与元表元方法
- HBase-6.hbase 协处理器
- 博客一周年and来深圳6年整