一、前言
最近每一天都在恶补DP.......就连做梦都梦到别人跟我说:“你这个DP写得怕是有问题哦?” 我:“······”
但是尽管每天都在恶补DP,依旧深陷一个魔咒:看正解,海阔天空;自己写,波涛汹涌......
所以,一点点总结经典的DP模型和经典例题。/突然严肃
二、题目描述
给定字符串a,字符串b,求a和b的LCIS(最长公共上升子序列)——的长度。
(校内OJ-3183)
“求出这个序列”的问题见后_(:з」∠)_
三、分析
本题的关键字:最长+公共+上升+子序列(+长度)
可以看到,这个问题具有相当多的重叠子问题,LIS与LCS也是经典的dp问题。
——>于是,我们想到了DP!
DP核心一:定义状态——F[i][j]表示以a串的前i个字符b串的前j个字符且以b[j]为结尾构成的LCIS的长度
Ps.之前自己没有注意到“以b[j]结尾”,所以盯着方程半天没有反应.../共鸣失败,还好后来看到了,在这里重点强调一下
DP核心二:状态转移方程
我们来考察一下这个这个状态,思考这个状态能转移到哪些状态似乎有些棘手;/它转移给谁?
如果把思路逆转一下,考察这个状态的最优值依赖于哪些状态,就容易许多了。/谁转移到它?</