近期计划
背包(0/1背包,完全背包,多重背包,分组背包,简单依赖背包,复杂依赖背包转化为树形dp)
LIS 最长单调递增子序列
LCS 最长公共子序列
区间dp
环形dp
树形dp
状态压缩dp
单调dp
求LCS(最长公共子序列)的长度的nlogn算法可以通过转换为求一个数列的LIS。与动归的n^2复杂度相比。
假如说我要求数列“1 2 3 5 4”和“5 4 3 2 1”的LCS,那么可以求第二个序列中的每个元素在第一个序列中的位置。
“5”在第一个序列的第四个位置,“4”在第五个位置,“3”在第三个位置,“2”在第二个位置,“1”在第一个位置,所以只需要对“4 5 3 2 1”这个序列求LIS的长度即可求出相应的LCS。
求LIS可以参考我先前博客的二分法算法: