最长递增子序列
来源:互联网 发布:淘宝关键词提取工具 编辑:程序博客网 时间:2024/06/07 06:16
1. 最长递增子序列
求长度
#include<iostream>#include<algorithm>#include<string>#include<vector>using namespace std;int LIS(int *d, int n) { vector<int> g(n, 0); int k = 0; for(int i = 0; i < n; i++) { int pos = lower_bound(g.begin(), g.begin()+k, d[i]) - g.begin(); if(pos == k) k++; g[pos] = d[i]; } for(int i = 0; i < k; i++) cout<<g[i]<<" "; cout<<endl; return k;}int main() { int n; while(cin>>n) { int *d = new int[n]; for(int i = 0; i < n; i++) cin>>d[i]; cout<<LIS(d, n)<<endl; delete[] d; }}
求长度与一条最短的序列,这种方法得到的一定是当前字典序最小的方案
#include<iostream>#include<algorithm>#include<string>#include<string.h>#include<vector>using namespace std;int LIS(int *d, int n) { vector<int> g(n, 0); vector<int> p(n, 0); int pre[n]; for(int i = 0; i < n; i++) pre[i] = i; int k = 0; for(int i = 0; i < n; i++) { int pos = lower_bound(g.begin(), g.begin()+k, d[i]) - g.begin(); if(pos == k) k++; g[pos] = d[i]; p[pos] = i; if(pos) pre[i] = p[pos-1]; } int t = p[k-1]; int j = k - 1; vector<int> ans(k); while(j >= 0) { ans[j--] = d[t]; t = pre[t]; } for(int i = 0; i < k; i++) cout<<ans[i]<<" "; cout<<endl; return k;}int main() { int n; while(cin>>n) { int *d = new int[n]; for(int i = 0; i < n; i++) cin>>d[i]; cout<<LIS(d, n)<<endl; delete[] d; }}
2. 最长非递减子序列(包含重复元素)
将上述函数的
lower_bound 修改为 upper_bound就可以了
这两个函数包含在头文件#include <algorithm>
3. 最长递增子串(求长度以及输出对应路径)
#include<iostream>#include<algorithm>#include<string>#include<string.h>#include<vector>using namespace std;int LIS(int *d, int n) { int max_len = 1; int max_i = 0; int cur_len = 1; for(int i = 1; i < n; i++) { if(d[i] > d[i-1]) cur_len++; else cur_len = 1; if(cur_len > max_len) { max_len = cur_len; max_i = i; } } for(int i = max_i + 1 - max_len; i <= max_i; i++) cout<<d[i]<<" "; cout<<endl; cout<<"max_len = "<<max_len<<endl; return max_len;}int main() { int n; while(cin>>n) { int *d = new int[n]; for(int i = 0; i < n; i++) cin>>d[i]; cout<<LIS(d, n)<<endl; delete[] d; }}
0 0
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 计算机组成原理之指令调度和延迟分支
- 画网络拓扑图好用的工具
- springMVC + mybatis + bootstrap 框架学习
- 【Cubieboard2】配置编译内核支持SPI全双工通信驱动
- 加载图片工具类
- 最长递增子序列
- 误删Linux path中的路径恢复
- JS获取时间戳兼容问题
- javascript加载xml文件,兼容Chrome
- 同事们,开始逗闷子了。
- DirectX9中Pixel Coordinates System的一个怪异特性
- Windows下PostgreSQL安装图解
- Java实现斐波那契数列并输出前10000个数值
- XML Schema的基本语法