uva481(打印LIS路径)
来源:互联网 发布:雷迪克数据 编辑:程序博客网 时间:2024/06/07 00:07
1. 思路
对于LIS的求解问题,我采用的是二分+贪心进行求解,然后对于打印路径采用一个f[]数组记录,f[i]代表LIS序列中的第i个元素的前面的一个元素的位置;
2. code
#include <cstdio>#include <cstring>#include <algorithm>#include <stack>using namespace std;const int N = 1e5+5;int val[N], dp[N], f[N], pos[N];int main() { int n = 0; int m; while(scanf("%d", &m) != EOF) {val[n++] = m; } memset(dp, 0x3f3f3f3f, sizeof(dp)); // dp[0] = 0; for(int i = 0; i < n; ++ i) { int lpos = lower_bound(dp, dp+n, val[i]) - dp; //在已构造的LIS序列中找出大于等于val[i]的元素的位置 dp[lpos] = val[i]; pos[lpos] = i; f[i] = (lpos ? pos[lpos-1] : -1); // 记录路径 } stack<int> s; n = lower_bound(dp, dp+n, 0x3f3f3f3f) - dp; printf("%d\n-\n", n); for(int i = pos[n-1]; i != -1; i = f[i]) { // 从LIS序列的最后一个元素向前回溯 s.push(val[i]); } while(!s.empty()) { printf("%d\n", s.top()); s.pop(); } return 0;}
0 0
- uva481(打印LIS路径)
- 【UVA481】
- UVa 103 - Stacking Boxes (LIS,打印路径)
- 打印LIS
- Uva 10131 Is Bigger Smarter? (LIS,打印路径)
- Hust oj 1116 选美大赛(LIS + 打印路径)
- LIS最长上升子序列(打印路径)
- UVA 481 What Goes Up LIS+nlog(n)算法,打印路径
- uva 10131 Is Bigger Smarter?(动态规划:LIS变形+路径打印)
- 【LIS】【输出一条路径】
- LIS+路径输出 模板
- 2015 UESTC Training for Dynamic Programming N - 导弹拦截 LIS nlog(n)+打印字典序最小的路径
- LIS+输出路径模板(1160)
- HDU1160-LIS&路径记录-J
- UVa481 - What Goes Up
- uva481 What Goes Up
- UVa481 What Goes Up
- uva 10599- Robots(II) LIS记录路径
- 一个开发对运维的一点反思
- centos 使用 systemctl 使 docker 容器(container)开机启动
- 登陆页面
- 树状数组模板
- 从零开始学习Kinect编程(一) 4.20
- uva481(打印LIS路径)
- Educational Codeforces Round 19 E. Array Queries
- CodeForces 623 B.Array GCD(数论+dp)
- VS2008工程向Linux移植
- 训练营第六天作业
- bash位置参数变量
- unix高级环境编程.第一章习题答案
- BRDF详解
- java.sql.date和java.util.date的相互转换