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\),做:
答案为 \(\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_{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}\)。则:
令一开始有 \(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\) 的答案,则:
答案即 \(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\) 的方案数。则:
答案即 \(\sum_{i=1}^ndp_{n, i}\)。
前缀和优化一下,时间复杂度 \(O(n^2)\)。
U, Grouping
令 \(dp_S\) 表示已分组的集合为 \(S\) 的最大价值,则:
答案即 \(dp_{\{1, \dots, n\}}\)。
时间复杂度 \(O(2^nn^2 + 3^n)\)。
V, Subtree
令 \(d_u\) 表示将 \(u\) 染成黑色的前提下,以 \(u\) 为根的子树的方案数,则:
再令 \(p_u\) 表示将 \(fa_u\) 染成黑色的前提下,以 \(fa_u\) 为根的子树除去以 \(u\) 为根的子树的方案数 \(\textbf{+1}\),则:
则对于 \(i\),答案为 \(d_i \times p_i\)。
前后缀积优化一下,时间复杂度 \(O(n)\)。
W, Intervals
令 \(dp_i\) 表示处理到 \(i(1 \le i \le N)\) 的答案,则:
答案即 \(\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_{n + 1}\)。
时间复杂度 \(O(n^2 + (h + w)\log(h + w))\)。
Z, Frog 3
令 \(dp_i\) 表示跳到 \(i\) 的最小花费,则:
答案即 \(dp_n\)。
斜优一下,时间复杂度 \(O(n)\)。


浙公网安备 33010602011771号