ATC 简单 DP 题解

训练日记 · 2024-02-13 · 459 人浏览

ABC248F Keep Connect

DP 过程中最多形成上下点所在的两个联通块,记录上下点是否连通 $f_{i,j,0/1}$。

ARC123C 1, 2, 3 - Decomposition

先枚举答案,然后搜索转移合法性 $f_{当前位,进位,未终止的123串数}$,既然答案不超过 $5$,复杂度可以保证。

AGC054B Greedy Division

考虑定下了每个数贡献的正负,在正负这一组内的相对位置,那么构造出的操作序列是唯一的。记 $f_{i,j,k}$ 为考虑到第 $i$ 位,放了 $j$ 个到正,和为 $k$。答案为 $\sum_i i!(n-i)!f_{n,i,\frac{\sum a_j}{2}}$。

AGC054A Remove Substrings

注意到答案最多为 $2$,证明用反证是简单的。

ABC145E All-you-can-eat

既然最优化不可撤回可以使用数据结构多一个 $\log$。但是注意到放到最后吃的是选择吃的时间最长的一定不劣,所以排序后直接背包就可以了。

ARC132C Almost Sorted

可以状压,既然 $d\le 5$,则只需状压 $11$ 个位置。

ABC333F Bomb Game 2

可以记 $f_{i,j}$ 为长度为 $i$ 的队列第 $j$ 个人存活的概率。同层内转移有环,既然同层数值之和为 $1$,可以解方程。

ABC301E Pac-Takahashi

路径显然是从 $S$ 到 $G$ 经过一系列 $o$。状压所有的 $o$ 并预处理两两之间的距离。

ABC247F Cards

$p_i$ 与 $q_i$ 连边后问题为基环树边覆盖方案数。而且我们注意到点的度数不超过 $2$,图只能是若干个环,每个环不同的信息只有其大小,可以想到设 $f_i$ 为大小为 $i$ 的环的方案数。转移是 $f_i = f_{i-1}+f_{i-2}$,证明使用容斥。

AGC018A Getting Difference

可以辗转相减得到集合中所有数的 $\gcd$,于是 $k$ 合法当且仅当 $k\equiv 0(\bmod \gcd),k\le\max_i(a_i)$

ABC314E Roulettes

题意中“根据之前结果”暗示选择和还需要得到的分数相关。不妨设 $f_{m}$ 为还需要至少 $m$ 分的期望代价。则选数列 $x$ 的转移为 $f_m=\frac{\sum_{i=1}^{p_x}f_{m-s_{x,i}}}{p_x}+c_x$,对所有 $x$ 取 $\max$。

ABC335F Hop Sugoroku

注意到跳转到子问题的过程不可逆,设 $f_x$ 为从 $x$ 起跳的可能方格集数量,则 $f_{x}=\sum_if_{x+iA_x}$,从后往前转移,根号分治优化。

ABC285E Work or Rest

既然每周必须有休息日,那我们不妨钦定一周的开始是一个休息日(Sunday)。于是 $f_{x}$ 表示考虑到的上一个休息日在第 $x$ 天的最大工作量,使用辅助数组 $g_x$ 表示连续工作 $x$ 天的贡献。

ABC315F Shortcuts

跳过的代价指数级上升,可以设置一个允许跳过的上界。$f_{n,m}$ 表示已经跳过了 $m$ 个点,当前在点 $n$ 的贡献,转移复杂度 $O(nm^2)$。

ABC195E Lucky 7 Battle

注意到策略只和当前数字模 $7$ 的结果相关,记录进状态,从后往前转移即可。

ABC169F Knapsack for All Subsets

子集具有传递性,不妨考虑集合 $X$ 使 $\sum_{x\in X}A_x=S$,可见 $X$ 对答案的贡献是 $2^{N-\lvert X\rvert}$。所以记 $f_{n,m}$ 为集合 $X$ 属于前 $n$ 个数构成的集合且和为 $m$ 的贡献,$f_{n,m}=f_{n-1,m-A_n}+2f_{n-1,m}$。

ABC190E Magical Ornament

问题为构造一条最短可重路径经过 $C$ 中所有点,记 $f_{msk,i}$ 为经过了 $msk$ 且最后一个点为 $i$ 的子问题的答案,预处理最短路后直接转移。

ABC234F Reordering

题意等价于每种字母保留一定量后重排的结果数。不难设 $f_{c,n}$ 表示考虑到字符 $c$,长度已经为 $n$ 的字符串数量,转移时带上组合数系数。

ABC304F Shift Table

枚举最小循环节长度 $x$,除了保证其合法必须要填的 $y$ 个块之外,可以任选,方案 $f_x=2^{x-y}$。但是可能会重复,需减去更小的循环节 $i\mid x$ 的贡献 $f_i$ 。

AGC024B Backfront

排序风雨飘摇,不妨考虑岿然不动的部分。其必定是排序后的一个子串。答案即为最长连续上升子序列。记 $f_{x}$ 为最后一个数为 $x$ 的最长长度,按照排列顺序转移。

Theme Jasmine by Kent Liao