Longest Increasing Subsequence - 最长递增子序列


问题

序列的递增子序列是原序列的子集,元素相对原序列的顺序不变,且依次递增。例如序列的递增子序列有

求序列的最长递增子序列的长度。

解法

设序列的长度为,范围为。设是以为最后一个元素的最长递增子序列的长度,则有状态转移方程:

个字符的最长递增子序列显然是空的,因此

对于序列中第个数字,至少一个字符可以作为一个递增子序列,因此至少有。若(其中)则的最长递增子序列可以组成一个更长的递增子序列,因此,遍历所有可能的,找出下一个最长的递增子序列;

该算法的时间复杂度为


源码

LongestIncreasingSubsequence.h

LongestIncreasingSubsequence.cpp

测试

LongestIncreasingSubsequenceTest.cpp