最长不下降子序列
来源:互联网 发布:游戏程序员需要做什么 编辑:程序博客网 时间:2024/05/07 14:29
/*开辟一个堆栈数组stack[],每次取栈顶元素top和读到的元素temp做比较,如果temp>top则将temp入栈,如果temp<=top则二分查找栈中的比temp大的第一个元素,并用temp替换他,最后max即为栈的大小 */ #include <iostream>#include <cstdlib>#define SIZE 1001using namespace std; int main(){ int i, j, n, top, temp; int stack[SIZE]; cin >> n; top = 0; stack[0] = -1;//第一个元素可能为0 for (i = 0; i < n; i++) { cin >> temp; if (temp > stack[top])//比栈顶元素大数就入栈 stack[++top] = temp; else { int low = 1, high = top; int mid; while(low <= high)//二分检索栈中比temp大的第一个数 { mid = (low + high) / 2; if (temp > stack[mid]) low = mid + 1; else high = mid - 1; } stack[low] = temp;//用temp替换 } } cout << top << endl;//最长序列数就是栈的大小 return 0;}
//动态规划 #include<iostream>using namespace std;int a[10001];int Link[10001]; int Long[10001];int n,Max;int find(int key){int L=1,R=Max,mid;while(L<=R){mid=(L+R)/2;if(a[Long[mid]]<key)L=mid+1;else R=mid-1;}return L-1;}int main(){int i,j,k,l;cin>>n;for(i=1;i<=n;i++){cin>>a[i];}Max=1;Long[Max]=1;Link[1]=1;for(i=2;i<=n;i++){if(a[i]>=a[Long[Max]]){Max++;Long[Max]=i;Link[i]=Long[Max-1];}else{l=find(a[i]);Long[l+1]=i;Link[i]=Long[l];}}cout<<Max<<endl;k=Max;i=Long[Max];while(Max>0){Long[Max]=a[i];i=Link[i];Max--;}}
#include<iostream>using namespace std;int n,longest;int a[10001],dp[10001];int main(){cin>>n;longest=1;for(int i=1;i<=n;i++){cin>>a[i];dp[i]=1;}for(int i=2;i<=n;i++){for(int j=1;j<i;j++){if(a[i]>a[j]) dp[i]=max(dp[j]+1,dp[i]);}longest = max(dp[i],longest);}cout<<longest<<endl;}
阅读全文
0 0
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- 最长不下降子序列
- tyvj P1049:最长不下降子序列
- Tyvj 1049 最长不下降子序列
- 常用Linux命令
- 解决unique_ptr在不同继承层次转化指针和deleter的问题
- 05-树7 堆中的路径 (25分)
- Spring框架(一)
- Matlab数组创建
- 最长不下降子序列
- Linux安全1-用户密码被暴力破解
- 图像处理库中图片缩放参数分析
- 从头到尾彻底理解傅里叶变换算法(上)
- 《Linux Shell编程从初学到精通(第2版)》pdf
- eclipse 插件刷新问题笔记
- K-RNN算法的Matlab代码
- JAVA中接口和抽象类的区别
- Android 动画之淘宝商品选择型号动画