最长单调递增子序列(LIS)
来源:互联网 发布:淘宝排名靠前技巧软件 编辑:程序博客网 时间:2024/05/21 22:34
1.最长单调递增子序列(O(n^2))
(可打印路径)
例如:打印出 2 5 4 3 9 7 8 的最长单调子序列;
① 引入数组c[ ] ,保存从0~i这一段序列,a[i]的最大长度;
②引入数组path[ ],表示c[i] 是由那个c[j] 值所得到的;
index0 1 2 3 4 5 6 a[i]2543978c[i]1222334path[i]-1000115样例输出:2 5 7 8(输出是根据path[]记录路径输出的)
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[100],n;int c[100],path[100];int LIS(){ int flag=0; path[0]=-1; c[0]=1; for(int i=1;i<n;i++) { c[i]=1; for(int j=0;j<i;j++) { if(a[i]>a[j]&&c[j]+1>c[i]) { c[i]=c[j]+1; path[i]=j; } } } int maxlen=0; for(int i=0;i<n;i++) //找到c[i]值最大,即为长度最长的子序列的下标; { if(c[i]>maxlen) { maxlen=c[i]; flag=i; } } return flag;}void store(int flag) //递归输出;{ if(flag==-1) return ; else { store(path[flag]); printf("%d ",a[flag]); }}int main(){ while(~scanf("%d",&n)) { memset(a,0,sizeof(a)); for(int i=0;i<n;i++) scanf("%d",&a[i]); int ans=LIS(); store(ans); cout<<endl; } return 0;}
0 0
- 单调递增最长子序列(Lis)
- 最长单调递增子序列(LIS)
- 最长单调递增子序列-LIS问题
- 最长单调递增子序列LIS
- 单调递增最长子序列(LIS)
- nyoj 单调递增最长子序列 17 (LIS模板)
- nyoj 17 单调递增最长子序列 (LIS)
- NYOJ 17 单调递增最长子序列 (LIS模板)
- 单调递增最长子序列(LIS)【NY】-17
- 单调递增最长子序列LIS(两种解法)
- 单调递增最长子序列(LIS)&&最长公共子序列(LCS)
- NYOJ - 17 - 单调递增最长子序列(动态规划--LIS--单调递增最长子序列)
- 单调递增子序列LIS (DP)
- nyoj 17 单调递增最长子序列 【LIS】
- NYOJ 17 单调递增最长子序列(LIS)
- nyoj--17 单调递增最长子序列(LIS)
- 最长递增子序列问题((LIS))
- 最长递增子序列(LIS)
- Lesson29 Taxi!
- 【数据抓取】模拟登陆
- 认识div在排版中的作用
- 考研复试系列——第一节 文件操作
- Codeforce
- 最长单调递增子序列(LIS)
- (转)Android源码解析(二十四)-->onSaveInstanceState执行时机
- pyspark 使用
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- crond定时任务
- Lesson30 Football or polo?
- Volley的使用及其工具类的封装
- 大数据工程师面试题(五)
- 数据库事务隔离级别