Living-Dream 系列笔记 第30期

Posted on 2024-03-03 18:34  _XOFqwq  阅读(2)  评论(0编辑  收藏  举报

本期讲解入门 \(dp\)

知识点

\(dp\) 问题的特征:

  • 可以通过对于子问题(与原问题结构相同但规模更小的问题)的求解来得出原问题的解

  • 无后效性(即对于当前问题的求解不会影响到其他问题的求解)。

\(dp\) 问题的求解过程:

我们令 \(dp\) 数组表示原问题的若干个子问题。

  • 设计状态(即对于 \(dp_i\) 赋予实际意义,是问题的通解)。

  • 确定答案如果在状态设计好后仍无法确定答案,则说明状态设计错误

  • 找出状态转移方程(即规则,用于描述各个状态之间的关系)。

  • 设计初始状态(即无法通过状态转移方程推出的状态)。

  • 确定边界条件(即对于求解问题无关的状态)。

  • 按照状态转移方程递推即可。

T1

考虑如何设计状态:\(dp_i\) 为以 \(i\) 结尾的最大子段和。

考虑答案是什么:显然每一个 \(i\) 都有可能为最大子段和的子段末尾,因此答案为 \(\max\{dp_i\}\)

考虑如何转移:显然,对于每个 \(a_i\),我们都可以将其自行成为一个新的子段,或者让其接在上一个子段的末尾,于是转移方程为:

\[dp_i = \max(dp_{i-1}+a_i,a_i) \]

考虑如何设置初始状态:显然第一个数仅可能自己作为一个子段,因此初始状态为 \(dp_1=a_1\)

因为本题只有一维,所以无需考虑边界条件。

于是根据方程递推求解即可。

T2

考虑如何设计状态:\(dp_{i,0}\)\(i\) 位数含偶数个 \(3\) 的数字个数,\(dp_{i,1}\)\(i\) 位数含奇数个 \(3\) 的数字个数。

考虑答案是什么:显然为 \(dp_{n,0}\)

考虑如何转移:对于 \(dp_{i,0}\),我们可以不选 \(3\),此时有 \(9\) 种选择;也该可以选 \(3\),此时只有一种 \(1\) 中选择,因此 \(dp_{i,0} = dp_{i-1,0} \times 9 + dp_{i-1,1}\)

考虑初始条件:显然 \(dp_{1,0} = 9,dp_{1,1} = 1\)

本题亦无需考虑边界条件。

然后按照转移方程递推即可。