Bidirectional Subsequence - 双向子序列


问题

递减子序列和递增子序列的概念相同,但渐变方向相反,递减子序列的元素之间依次递减。

在长度为的序列中寻找元素,使得的最长递增子序列和的最长递减子序列,求两段子序列的长度的最大之和。

解法

是以作为最右边元素的最长递增子序列的长度,是以作为最左边元素的最长递减子序列的长度。的状态转移方程见

最后返回),即所有中的最大值,之所以减去是因为最右边的元素和最左边的元素是同一个元素,重复了因此长度减。该算法的时间复杂度为


源码

BidirectionalSubsequence.h

BidirectionalSubsequence.cpp

测试

BidirectionalSubsequenceTest.cpp