首页 > 代码库 > 最长不下降序列解决算法
最长不下降序列解决算法
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include "stdafx.h" #include<iostream> #include<cstdio> #include<cstring> using namespace std; long long d[100000],a[100000]; long long len,i,k,n; long long min( long long t) { long long s,w,mid; s=0; w=len; while (s<w) { mid=(s+w)/2; if (d[mid]<=t) s=mid+1; else w=mid; } return s; } int _tmain( int argc, _TCHAR* argv[]) { cin>>n; for (i=1;i<=n;i++) cin>>a[i]; len=0; d[0]=-29888888; //设一个非常小的数字 for (i=1;i<=n;i++) { if (a[i]>=d[len]) { len++; d[len]=a[i]; cout<<d[len]<< " " ; } //放置数组 else { k=min(a[i]); d[k]=a[i]; } } cout<<endl; cout<<len<<endl; return 0; } |
注意:这个算法可以获得最长序列的长度值,但是数组d中保存的并不是最长长度的元素。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。