POJ1631 动态规划 LIS
2018-03-17 01:12
411 查看
题意:
求LIS。
思路:
反思:
1、学习了求LIS的O(nlogn)算法思想;
2、注释掉的部分为求LIS路径的代码。
代码:
求LIS。
思路:
反思:
1、学习了求LIS的O(nlogn)算法思想;
2、注释掉的部分为求LIS路径的代码。
代码:
#include <cstdio> #include <algorithm> #include <cmath> #include <iostream> #include <stack> using namespace std; const int MAXN = 4e4 + 10; int arr[MAXN]; int dp[MAXN]; int pos[MAXN], f[MAXN]; int main() { int t; scanf("%d", &t); while(t--) { int n; scanf("%d", &n); for(int i = 0; i < n; i++) { scanf("%d", &arr[i]); } int len = 1; dp[0] = arr[0]; // pos[0] = 0; // f[0] = -1; for(int i = 1; i < n; i++) { if(arr[i] >= dp[len - 1]) { dp[len] = arr[i]; // pos[len] = i; // f[i] = pos[len - 1]; len++; } else { int lpos = lower_bound(dp, dp + len, arr[i]) - dp; dp[lpos] = arr[i]; // pos[lpos] = i; // f[i] = lpos ? pos[lpos - 1] : -1; } } printf("%d\n", len); // stack<int> s; // for(int i = pos[len - 1]; i != -1; i = f[i]) // { // s.push(arr[i]); // } // while(!s.empty()) // { // printf("%d ", s.top()); // s.pop(); // } } return 0; }
相关文章推荐
- POJ_1631_Bridging_Signals_(动态规划,LIS)
- poj 1631(Bridging signals LIS)nlogn
- POJ 1631 nlogn求LIS
- Poj 1631 Bridging signals (LIS, nlog(n))
- POJ 1631 nlogn求LIS
- POJ 1631(O(nlogn)LIS的2种做法)
- Poj 1631 && Hdu 1950 Bridging signals【LIS】
- POJ 1631 && HDU 1950 Bridging signals(LIS)
- poj-1631Bridging signals(LIS)
- POJ 1631 Bridging signals LIS(最长递增子序列) +nlogn算法+二分查找
- POJ - 1631-Bridging signals (LIS二分模板题)
- 最长上升子序列(LIS)POJ 1631 Bridging Signals
- POJ 1631 Bridging signals LIS(最长递增子序列) +nlogn算法+二分查找
- poj 2533 & poj 1631 Longest Ordered Subsequence( LIS果题 )
- POJ 1631 Bridging signals(LIS 二分法 高速方法)
- poj 1631 Bridging signals (LIS 之 n×logn 算法)
- POJ 1631 LIS 模板题
- [动态规划]之裸lis之最长上升子序列POJ 2533
- POJ-1631-Bridging signals-( 水LIS-O(nlogn) -DP)
- POJ 1631 Bridging signals(LIS的等价表述)