- 最长上升子序列
思路
- 2025-4-16 15:31:07 @
/* 最长上升子序列 LIS 子段 n^2 子序列 2^n
上升子序列=单调递增 指后面的数大于前面的数
DP-原版 1.状态: f[i] = 以a[i]结尾的LIS; ans = max{f[i]};
2.转移方程 f[i] = max{f[j]+1|a[j]<a[i]}
3.初值 f[i] = 1;
O(n^2)
DP-优化 1.状态: f[i] = 长度为i的LIS的最小结尾; ans = len;
2.转移方程 i 1~n//n if(a[i] > g[len]){ ++len; g[len] = a[i]; } j = lower_bound(f+1,f+1+len,a[i])-f;//log n g[j] = a[i];
3.初值 len = 0 g[0] = 0;
参考代码: 自己写 O(n log n) */
0 条评论
目前还没有评论...
信息
- ID
- 513
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 22
- 已通过
- 8
- 上传者