Advertisement

Dynamic programming: Longest Non-decreasing Subsequence

阅读量:

动态规划的核心在于,在寻找最优解的过程中系统性地记录中间结果。对于寻找最长不下降子序列的问题而言,在每一步骤中都需要维护现有的所有可能子序列,并根据当前元素与这些子序列的关系进行更新与优化。具体而言,在处理当前元素时,在所有比当前元素小且长度最长的现有子序列末尾追加该元素即可满足条件;例如考虑一个有序列为2, 1, 3的情况,则初始时只有一个长度为1的子序列为2;随后处理1时由于没有比1小的前缀可选,则单独形成一个长度为1的新子序列;接着处理3时发现有两个满足条件的前缀(分别为长度1),此时可以选择其中一个并将其扩展至长度2即可满足需求;综上所述,动态规划的核心思想体现在以下几个关键步骤上:建立状态转移方程、初始化边界条件以及通过迭代逐步优化得到最终结果。

在处理数组n时,在处理数组n时,在处理数组n的过程中,在处理数组n的时候,在处理数组n的过程中,
其中第一个元素自动形成一个独立的子序列。
接着从第二个元素开始逐步排查。
当检查第二个元素的时候,
如果当前元素不小于前一元素,则可以认为包含前两个元素形成长度为二的非递减子序列,
同时这两个单个元素也各自构成长度为一的非递减子序列;
反之,
如果当前元素小于前一元素,则这两个单独的单个元素分别构成各自的长度为一的非递减子序列。
当处理第i个元素的时候,
我们需要在前面的所有j=1到j=i-1的位置中找到一个比当前i位置值还要大的

全部评论 (0)

还没有任何评论哟~