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  阅读(34)  评论(0)    收藏  举报