Dp后的递归输出

Dp后的递归输出


输出的忧伤

相信许多同学都有这样的经历:当你兴致勃勃的写出一道Dp题,看到Output中最后一行一串带来恐慌的数字。
心中一想:这道题,多半是算了。
多少个黑夜中的苦刷Dp,以为自己已经握紧了大(D)炮(p)。没想到,最后炮弹无法

Output

别哭,不忧伤。


拯救世界的递归

天空中闪过一道光….
算了,说人话。
我们可以把Dp看作递推的求解。
当我么得到答案时,就可以递归回去输出。

举个例子
题目

给定长度分别为l1,l2的整数序列a[],b[],求出它的最长公共子序列。

状态定义

f[i][j]:在a[1...i]b[1...j]中的最长公共子序列

状态转移

f[i][j]={f[i1][j1]+1a[i1]=b[j1]max(f[i1][j],f[i][j1])a[i1]!=b[j1]

1il1,1jl2

代码

Dp后的递归输出

输出

就是把Dp倒过来
自己领悟一下

代码

Dp后的递归输出

总结一下

(从不写伪代码,我写的是伪伪代码)
Dp后的递归输出


例题和解

LCIS


Thanks for reading!