AT DP

Educational DP Contest

A, Frog 1

令 \(dp_i\) 表示结束为 \(i\) 的最小花费,则 \(dp_i = \min\{dp_{i - 1} + |h_i - h_{i - 1}|, dp_{i - 2} + |h_i - h_{i-2}|\}\)。

答案为 \(dp_n\)。

时间复杂度 \(O(n)\)。

B, Frog 2

同 A,\(dp_i = \min_{j=1}^k\{dp_{i-j} + |h_i - h_{i-j}|\}\)。

答案为 \(dp_n\)。

时间复杂度 \(O(nk)\)。

C, Vacation

视 \(a_i, b_i, c_i\) 为 \(v_{1\dots 3}\),令 \(dp_{i, j}\) 表示到了第 \(i\) 天,完成的项目是 \(j\) 的最大欢乐值,则 \(dp_{i, j} = \max_{k=1, k \not= j}^3\{dp_{i - 1, k}\} + v_j\)。

答案为 \(\max_{i=1}^3\{dp_{n, i}\}\)。

时间复杂度为 \(O(n)\)。

D, Knapsack 1

令 \(dp_k\) 表示恰好 \(k\) 重量的物品的最大价值。

对于每一组 \(w_i, v_i\),做 \(dp_{k+w_i} \overset{\max}{\gets} dp_{k} + v_i, k \text{ from } w-w_i \text{ to } 0\)。

答案为 \(\max_{i=0}^w\{dp_i\}\)。

时间复杂度 \(O(nw)\)

E, Knapsack 2

令 \(dp_k\) 表示价值恰好为 \(k\) 的方案的最小重量,初始值为 \(\begin{cases}0 & k=0\\+\infty&\text{otherwise}\end{cases}\)。

对于每一组 \(w_i, v_i\),做 \(dp_{k+v_i} \overset{\min}{\gets}dp_{k} + w_i, k \text{ from } (\sum v_j) - v_i \text{ to } 0\)。

答案为 \(\max_{i=0}^{\sum v_i} i \text{ s.t. } dp_{i} \not=+\infty\)。

时间复杂度 \(O(n\sum v_i)\)。

F, LCS

令 \(dp_{i, j}\) 表示 \(s\) 的前 \(i\) 位与 \(t\) 的前 \(j\) 位的 LCS 最大长度。

则 \(dp_{i, j} = \begin{cases}dp_{i -1, j - 1} + 1 & s_i = t_j\\\max\{dp_{i - 1, j}, dp_{i, j - 1}, dp_{i - 1, j - 1}\}&\text{otherwise}\end{cases}\)。

令 \(fr_{i, j}\) 表示 \(dp_{i, j}\) 从 \(dp_{fr_{i, j}}\) 转移过来。

输出答案时,令 \((i, j) = (|s|, |t|)\),一直循环以下操作只到 \(i, j\) 有其一变成 \(0\)。

  • 若 \(dp_{i, j} \not= dp_{fr_{i, j}}\),输出 \(s_i\)。
  • \((i, j) \gets fr_{i, j}\)。

时间复杂度 \(O(|s||t|)\)。

G, Longest Path

令 \(dp_i\) 表示以 \(i\) 结尾的最长链长度。用拓扑排序,对于 \(i\) 的出边集合 \(e_i\),做:

\[dp_u \overset{\max}{\gets} dp_i + 1, u \in e_i \]

答案为 \(\max_{i=1}^n\{dp_i\}\)。

时间复杂度 \(O(n + m)\)。

H, Grid 1

令 \(dp_{i, j}\) 表示走到 \((i, j)\) 的方案数。初始值 \(dp_{1, 1} = 1\)。

按照 \(i, j \text{ from } 1 \text{ to } h, w\) 的方式循环,对于每一个 $a_{i, j} \not= $ # 的 \((i, j)\) 做:

\[dp_{i, j} \gets dp_{i - 1, j} + dp_{i, j - 1} \]

答案为 \(dp_{h, w}\)。

时间复杂度 \(O(hw)\)。

I, Coins

令 \(dp_{i, j}\) 表示前 \(i\) 个中有 \(j\) 个是朝上的概率,则 \(dp_{i, j} = dp_{i - 1, j}(1-p_i)+dp_{i - 1, j - 1}p_i\)。

答案即 \(\sum_{i=\lceil\frac{n}{2}\rceil}^n dp_{n, i}\)。

时间复杂度 \(O(n^2)\)。

J, Sushi

令 \(dp_{i, j, k}\) 表示剩 \(1\) 个寿司的有 \(i\) 个,\(2\) 个的有 \(j\) 个,\(3\) 个的有 \(k\) 个,操作至全空的期望步数,令 \(\sigma = \sum i, p = \frac{\sigma}{n}\)。则:

\[\begin{aligned} dp_{i, j, k} &= \sum_{m=0}^{+\infty}(1 - p)^m(m + 1)p + \overbrace{\frac{i}{\sigma}dp_{i - 1, j, k} + \frac{j}{\sigma}dp_{i + 1, j - 1, k} + \frac{k}{\sigma}dp_{i, j + 1, k - 1}}^{S}\\ &=S + p\bigg(\sum_{m=1}^{+\infty}m(1-p)^{m-1}\bigg)\\ &=S - p\Bigg[\bigg(\sum_{m=1}^{+\infty}(1-p)^m\bigg)'\Bigg]\\ &=S - p\Bigg[\bigg(\frac{(1-p)(1-(1-p)^{+\infty})}{1-(1-p)}\bigg)'\Bigg]\\ &=S - p\bigg[\Big(\frac{1-p}{p}\Big)'\bigg]\\ &=S + p\times\frac{1}{p^2}\\ &= S + \frac{1}{p}\\ &= \frac{n}{\sigma} + \frac{i}{\sigma}dp_{i - 1, j, k} + \frac{j}{\sigma}dp_{i + 1, j - 1, k} + \frac{k}{\sigma}dp_{i, j + 1, k - 1}\\ \end{aligned} \]

令一开始有 \(s_i\) 个盘子中有 \(i\) 个寿司,则答案为 \(dp_{s_1, s_2, s_3}\)。

时间复杂度 \(O(n^3)\)。

K, Stones

令 \(dp_i\) 表示还剩 \(i\) 个石子时先手是否必胜,则 \(dp_i = \lor_{j=1}^n\{\lnot dp_{i-a_j}\}\)。

若 \(dp_k = 1\) 则答案为 First,否则为 Second。

时间复杂度 \(O(nk)\).

L, Deque

令 \(dp_{i, j}\) 表示只剩 \(a_i, \dots, a_j\) 时先手能达到的最优结果,则 \(dp_{i, j} = \max\{a_i - dp_{i + 1, j}, a_j - dp_{i, j - 1}\}\)。

答案即 \(dp_{1, n}\)。

时间复杂度 \(O(n^2)\)。

M, Candies

令 \(dp_{i, j}\) 表示前 \(i\) 个人分 \(j\) 个糖的方案数。则 \(dp_{i, j} = \sum_{k=j - a_i}^{j}dp_{i - 1, k}\)。

答案即 \(dp_{n, k}\)。

前缀和优化一下,时间复杂度 \(O(n^2)\)。

N, Slimes

令 \(dp_{i, j}\) 表示消除 \(a_i \dots a_j\) 所需的消耗,则 \(dp_{i, j} = \sum_{k = i}^j + \min_{k=i}^{j - 1}\{dp_{i, k} + dp_{k + 1, j}\}\)。

答案即 \(dp_{1, n}\)。

前缀和优化一下,时间复杂度 \(O(n^3)\)。

O, Matching

令 \(dp_s\) 表示前 \(\text{popcount}(s)\) 个人配对情况为 \(s\) 的方案数,则 \(dp_s = \sum_{j \in s, a_{j, \text{popcount}(s)} = 1} dp_{s - \{j\}}\)。

答案即 \(dp_{2^n - 1}\)。

时间复杂度 \(O(2^nn)\)。

P, Independent Set

令 \(dp_{u, 0/1}\) 表示以 \(u\) 为根的子树内,\(u\) 为 \(0/1\) 的答案,则:

\[\begin{cases} dp_{u, 0} = \prod_{v \in E_u}dp_{v, 1}\\ dp_{u, 1} = \prod_{v \in E_u}(dp_{v, 0} + dp_{v, 1})\\ \end{cases} \]

答案即 \(dp_{root, 0} + dp_{root, 1}\)。

时间复杂度 \(O(n)\)。

Q, Flowers

令 \(dp_i\) 表示 \(1 \dots i\) 的答案,则 \(dp_i = a_i + \max_{h_j \lt h_i}dp_j\)。

答案即 \(\max_{i=1}^ndp_i\)。

树状数组优化一下,时间复杂度 \(O(n\log n)\)。

R, Walk

\(k\) 次方一下给定的邻接矩阵,然后求和即答案。

时间复杂度 \(O(n^3\log k)\)。

S, Digit Sum

令 \(dp_{i, j}\) 表示 \(i\) 位数,数位和 \(\bmod k = j\) 的方案数,然后数位 dp 一下即可。

时间复杂度 \(O(|K|D)\)。

T, Permutation

令 \(dp_{i, j}\) 表示填到 \(i\) 位,第 \(i\) 位在前 \(i\) 位排第 \(j\) 的方案数。则:

\[\begin{cases} dp_{i, j} = \sum_{k = 1}^{j - 1}dp_{i - 1, k} & s_{i - 1} = \texttt{"<"}\\ dp_{i, j} = \sum_{k = j}^{i - 1}dp_{i - 1, k} & s_{i - 1} = \texttt{">"} \end{cases} \]

答案即 \(\sum_{i=1}^ndp_{n, i}\)。

前缀和优化一下,时间复杂度 \(O(n^2)\)。

U, Grouping

令 \(dp_S\) 表示已分组的集合为 \(S\) 的最大价值,则:

\[dp_S = \max\begin{cases} \sum_{i, j \in S}a_{i, j}\\ dp_{T} + dp_{S / T}, \forall T \subset S \end{cases} \]

答案即 \(dp_{\{1, \dots, n\}}\)。

时间复杂度 \(O(2^nn^2 + 3^n)\)。

V, Subtree

令 \(d_u\) 表示将 \(u\) 染成黑色的前提下,以 \(u\) 为根的子树的方案数,则:

\[d_u = \prod_{v \in E_u}(d_v + 1) \]

再令 \(p_u\) 表示将 \(fa_u\) 染成黑色的前提下,以 \(fa_u\) 为根的子树除去以 \(u\) 为根的子树的方案数 \(\textbf{+1}\),则:

\[p_u = 1 + p_{fa_u} \times \prod_{v \in E_u / \{u\}}(d_v + 1) \]

则对于 \(i\),答案为 \(d_i \times p_i\)。

前后缀积优化一下,时间复杂度 \(O(n)\)。

W, Intervals

令 \(dp_i\) 表示处理到 \(i(1 \le i \le N)\) 的答案,则:

\[dp_i = \max\begin{cases} dp_{i - 1} + \sum_{r_j = i}v_j\\ dp_j, \forall 1 \le j \lt i \end{cases} \]

答案即 \(\max_{i = 1}^ndp_i\)。

线段树优化一下,时间复杂度 \(O(n\log n)\)。(同阶……)

X, Tower

01 背包,把转移的上线从背包容量改为承重即可。

时间复杂度 \(O(ns)\)。

Y, Grid 2

令 \((h, w)\) 为障碍 \(n + 1\),\(dp_i\) 为到达障碍 \(i\) 且不经过其他障碍的方案数,则:

\[dp_i = \binom{r_i + c_i - 2}{r_i - 1} - \sum_{r_j \le r_i, c_j \le c_i}\binom{r_i - r_j + c_i - c_j}{r_i - r_j} \]

答案即 \(dp_{n + 1}\)。

时间复杂度 \(O(n^2 + (h + w)\log(h + w))\)。

Z, Frog 3

令 \(dp_i\) 表示跳到 \(i\) 的最小花费,则:

\[dp_i = C + h_i^2 + \min_{1 \le j \lt i}\{h_j^2 + dp_j - 2h_ih_j\} \]

答案即 \(dp_n\)。

斜优一下,时间复杂度 \(O(n)\)。

posted @ 2023-12-02 19:53  cosf  阅读(49)  评论(0)    收藏  举报