算法:
为了保证DP的正确与方便,这里先提供一个结论:每次操作都一定要拔高第n棵玉米。
以下引用NS·YJD大佬的一篇博客的证明:
首先无论操作区间在哪里,如果区间两边存在玉米,那么这些玉米与区间内玉米拔高后的相对高度关系只有3种情况:1.原本区间内比它们高的玉米还是比它们高。2.原本区间内比它们矮的玉米不再比它们矮。3.原本区间内比它们矮的玉米还是比它们矮。
对于区间左边而言:
这三种情况都不会减少初始排列中已存在的最长不下降序列的长度,并且有可能使它增长
对于区间右边而言:
这三种情况都不会增加初始排列中已存在的最长不下降序列的长度,并且有可能使它减少
如此一来我们就可以发现,要想得到最长不下降序列,区间的右边不存在玉米的情况一定是最优解。
由此,我们可以设为以第i个玉米高度为结尾,且第i个玉米拔高j次的最长上升子序列的长度。
所以状态转移方程即为