- 分享
动态规划 - 简单线性dp问题
- @ 2025-6-23 20:23:37
(1) 最长上升子序列问题
问题描述
一个序列有个元素,请求出它的最长上升子序列.
状态(问题定义)
,以第个元素结尾的最长上升子序列的长度
初始化
~ 为1
状态转移方程
$$f[i] = \max(f[i], f[j] + 1) \quad \text{for } j < i \text{ and } x_i > x_j$$
答案
从~取出最大值
(2) 最大连续子序列和
问题描述
一个序列有个元素,求出连续子序列和最大
状态(问题定义)
,以第个元素结尾连续子序列和最大
初始化
~
状态转移方程
答案
从~取出最大值
(2) 选取元素问题
问题描述
一个序列有个元素,可以从这个序列中选取若干的元素使他们的和最大,但是不能选取连续的三个元素.
状态(问题定义)
,前个元素,第个元素不选能获得最大值 ,前个元素,第个元素选取能获得最大值
初始化
,其他元素都是
状态转移方程
$$f[i][0] = \max(f[i-1][0], f[i][0]) \quad \text{(第i个元素不选, 第i-1个元素不选)}$$$$f[i][0] = \max(f[i-2][0] + a[i-1], f[i][0]) \quad \text{(i-2>=0) (第i个元素不选, 第i-1个元素选, 第i-2 元素不选)}$$$$f[i][0] = \max(f[i-3][0] + a[i-1] + a[i-1], f[i][0]) \quad \text{(i-3>=0) (第i个元素不选, 第i-1个元素选, 第i-2 元素选, i-3 元素不选)}$$$$f[i][1] = \max(f[i-1][0] + a[i], f[i][1]) \quad \text{(第i-1个元素不选)}$$$$f[i][1] = \max(f[i-2][0] + a[i] + a[i-1], f[i][1]) \quad \text{(i-2>=0) (第i-1个元素选, 第i-2元素不选)}$$
答案
(3) 元素分组问题
问题描述
一个序列有个元素,把这些元素分成若干组,每一组都是有连续的元素组成,让每组元素之和大于等于0,分成尽可能多的组.
状态(问题定义)
前个元素最多能分成多少组 前个元素的和
初始化
,~ 为
状态转移方程
$$f[i] = \max(f[j] + 1, f[i]) \quad \text{for } j < i \text{ and } sum[i] - sum[j] \geq 0$$
答案
无答案, 答案为
1 条评论
-
litianrui LV 9 @ 2025-7-28 16:37:09有道理,太有道理了!
- 1