小技巧—DP过程中序列的记录

小技巧—DP过程中序列的记录

一道例题:

CF10D LCIS

求最长公共上升子序列的题。算是比较基础和经典的DP题目。

但是这道题目为什么是蓝了呢。。。可能就是因为它还需要维护一个序列的记录。

怎么维护呢?

我们开一个\(pre\)数组,表示当前状态的前一个位置是什么。即当前状态是由哪个状态新转移过来的。这样的话,我们只需要记录终止点pos,其前一个位置就是\(pre[pos]\),前一个就是\(pre[pre[pos]]\)。再前一个就是...(禁止套娃)

即记录出了整个路径。

最后的输出过程可以采用递归输出,但是没什么必要,一个while循环即可。

我们发现很多递归的东西其实都可以转成while循环,也就是非递归的形式。因为其本质是差不多一样的。while后面的条件就相当于函数的参数和递归出口。

讲完了。

posted @ 2020-09-28 11:17  Seaway-Fu  阅读(157)  评论(0编辑  收藏  举报