题目来源
- leetcode
题目解析
题目解析
最长序列型动态规划
- 可能出现一个信封A能放入信封B和信封C,但是信封B和信封C不能相互放入
- 将所有信封按照长度一维进行排序:
E
0
、
E
1
.
.
.
.
.
E
n
−
1
E_0、E_1.....E_{n-1}
E0、E1.....En−1,比如先按照长度,这样:
- 如果信封 E i E_i Ei能够放入信封 E j E_j Ej里,就一定有 i < j i<j i<j
- 如果一个信封 E j E_j Ej是最外层的信封,那么它里面的第一层信封 E i E_i Ei,一定满足 i < j i<j i<j
- 最后一步:
- 设最优策略中最后一个信封,即最外层的信封,是 E j E_j Ej
- 那么,对于次外层信封:
- 一定是某个 E i , i < j E_i,i<j Ei,i<j
- 而且以 E i E_i Ei为最外层信封的嵌套层数也一定是最多的
- 子问题:
- 要求以 E j E_j Ej为最外层信封时最多的嵌套层数
- 需要知道以 E i E_i Ei为最外层信封时最多的嵌套层数 i < j i < j i<j
- 状态:f[i]表示以 E i E_i Ei为最外层信封时最多的嵌套层数
(2)转移方程
(3)初始条件和边界情况
- 无初始条件(没有任何信封就是1)
(4)计算顺序
- 从小到大