近期计划

 背包(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可以参考我先前博客的二分法算法:

 

原文地址:https://www.cnblogs.com/bytebull/p/5442791.html