(前言)最长上升子序列 L I S ( l o n g e s t i n c r e a s i n g s u b s e q u e n c e ) LIS(longest\, increasing\, subsequence) LIS(longestincreasingsubsequence)我其实觉得可以拓展名称为最长单调子序列 L M S ( l o n g e s t m o n o t o n o u s s u b s e q u e n c e ) LMS(longest \,monotonous \,subsequence) LMS(longestmonotonoussubsequence)。另外 L M S LMS LMS还可以拓展为偏序集问题,详见这位大佬的博客——偏序集,Dilworth定理与导弹拦截
定义
最长单调子序列就是指在一段序列中,可以从左到右不改变左右顺序的选出若干个数,使他们满足某种单调关系,并求出最大值,而最长上升子序列就是其中的一种。
解读与分析
这种满足单调性的问题,我们一般尝试着去找单调的传递性.如LIS我们就利用他的单调,比如:将一段LIS存储到一个数组里最小值一定在数组的最右侧等。又或者是利用单调队列,单调栈这种对单调性有要求的特殊处理方式进行维护和求得所需的值。
然后由于是传递性问题,我们还往往可以选择DP进行转移。
为了和下面的例题契合,我们接下来讨论的是 最长不下降子序列而不是最长上升子序列。
设 f i f_i fi为以 a i a_i ai为结尾的最长不下降子序列的长度
转移方程:
f i = m a x j = 1 , a i > a j i − 1 f j + 1 f_i = max_{j=1,a_i > a_j}^{i-1}f_j + 1 fi=maxj=1,ai>aj