Dynamic Programming21 sections · 916 units
Open in Course

Longest Bitonic Subsequence - Two Passes

Forward and backward

Compute two arrays: lis[i]lis[i] = length of LIS ending at index ii (standard LIS) lds[i]lds[i] = length of longest decreasing subsequence starting at index ii To get ldslds, run LIS from right to left.

The longest bitonic subsequence using ii as peak has length lis[i]+lds[i]1lis[i] + lds[i] - 1 (subtract 1 because ii is counted twice). The answer is max(lis[i]+lds[i]1)\max(lis[i] + lds[i] - 1) for all ii.