2020 Summer #2
0x01 Wooden Fence
每种木板可以拆成两种木板,分别对应转不转 \(90^\circ\)。
设 \(f(i, j)\) 表示已经搭了长度为 \(i\) 的栅栏,用的最后一块木板的种类为 \(j\) 的方案数。
0x02 Fragile Bridges
设 \(f(i, \text{Mask})\) 表示从 \(i\) 出发的最优解,其中 \(\text{Mask}\) 的第一位表示方向,第二位表示最后是否返回 \(i\)。
则 \(\text{ans} = \displaystyle\max_{1 \le i \le n} \{ f(i, 00) + f(i, 11), f(i, 01) + f(i, 10) \}\)。
0x03 Little Elephant and Retro Strings
设 \(f(i)\) 表示前缀 \(s_{[1, i]}\) 中有且仅有 \(s_{[i-k+1, i]}\) 一个合法 B 串的方案数,\(g(i)\) 表示后缀 \(s_{[i, n]}\) 中有且仅有 \(s_{[i, i+k-1]}\) 一个合法 W 串的方案数。
则 \(\text{ans} = \displaystyle\sum_{i=1}^{n} \left( \displaystyle\sum
_{j=1}^{i-1} \left( f(j) \cdot 2^{Cnt(j+1, i-1)} \right) \cdot g(i) \right)\),其中 \(Cnt(l, r)\) 表示 \(s_{[l, r]}\) 中 X 的个数。
设 \(F(i)\) 表示前缀 \(s_{[1, i]}\) 中没有合法 B 串的方案数,则 \(F(i) = F(i-1) \cdot 2^{Cnt(i, i)} - f(i)\)。
若 \(s_{i-k}\) 不为 B,且 \(s_{[i-k+1, i]}\) 中没有 W,有 \(f(i) = F(i-k-1)\),否则 \(f(i) = 0\)。
\(g(i)\) 的计算与 \(f(i)\) 类似。
0x04 Word Cut
如果存在合法的变换,显然可以一次变换将 \(start\) 变成 \(end\),设这样的变换数为 \(\text{cnt}\)。
设 \(f(i, \text{Mask})\) 表示 \(i\) 次变换后的方案数,\(0\) 表示变换后的串是 \(end\),\(1\) 表示不是。
0x05 George and Job
设 \(f(i, j)\) 表示前 \(i\) 个数中选了 \(j\) 个区间的最大和。
0x06 Painting Square
设 \(f(i, j)\) 表示边长为 \(i\) 的正方形还需要操作 \(j\) 次的方案数。
显然 \(f(2i+1, j_1+j_2+j_3+j_4+1) = f(i, j_1) \cdot f(i, j_2) \cdot f(i, j_3) \cdot f(i, j_4)\),复杂度 \(O(n k^4)\)。
考虑优化转移,设 \(g(2i+1, j_1+j_2) = f(i, j_1) \cdot f(i, j_2)\),则 \(f(i, j_1+j_2) = g(i, j_1) \cdot g(i, j_2)\),复杂度 \(O(nk^2)\)。
设边长为 \(i\) 的正方形可以递归 \(D(i)\) 层,则 \(D(1) = D(2i) = 0, D(2i+1) = D(i) + 1 \ (i \in \N_ +)\)。
显然答案只与 \(Dep(n)\) 有关而与 \(n\) 无关,则只对深度 DP 即可,复杂度 \(O(\log n \cdot k^2)\)。
0x07 Working out
枚举交点,预处理出每个位置到四个角的最大值。
设交点为 \((x, y)\),则有 \(\begin{cases} \text{Iahub} : (x-1,y) \to (x+1, y) \\ \text{Iahubina} : (x, y+1) \to (x, y-1) \end{cases}\) 或 \(\begin{cases} \text{Iahub} : (x,y-1) \to (x, y+1) \\ \text{Iahubina} : (x-1, y) \to (x+1, y) \end{cases}\)。
0x08 Substring and Subsequence
设 \(f(i, j)\) 表示以 \(s_i\) 结尾的字串和 \(t_{[1, j]}\) 中的子序列配对的方案数。
0x09 Wall Bars
设 \(f(i, a, b, c, \text{Mask})\) 表示装到第 \(i\) 根横杆,到另外三种横杆的距离分别为 \(a\)、\(b\) 和 \(c\) 的方案数,其中 \(\text{Mask}\) 表示第 \(i\) 根横杆能否从地面到达。
时间复杂度 \(O(n \cdot h^3)\)。
0x0A Coloring Brackets
设 \(f(i, j, \text{lc}, \text{rc})\) 表示第 \(i\) 和第 \(j\) 个括号的颜色分别为 \(\text{lc}\) 和 \(\text{rc}\) 时,将 \(s_{[i, j]}\) 染色的方案数。
DFS 转移。
0x0B Flood Fill
初始时连续相同的 \(c_i\) 显然可以合并。
显然对于一个区间 \([l, r]\),操作次数最小的染色方案一定会把整个区间染成 \(c_l\) 或 \(c_r\)。
设 \(f(l, r, \text{Mask})\) 表示将 \(c_{[l, r]}\) 染成同种颜色的最小操作次数,\(\text{Mask}\) 表示取 \(c_l\) 或 \(c_r\) 作为整个区间的颜色。
0x0C Dima and Figure
合法的涂色应满足左右边界均为先凸后凹。
设 \(f(i, l, r, \text{Mask})\) 表示第 \(i\) 行左右端点分别为 \(l\) 和 \(r\) 的所有方案数,\(\text{Mask}\) 表示当前左右边界是凹还是凸。
注意左右边界都直着向下的情况,以及通过合理安排枚举顺序,继承状态代替前缀和操作的优化。
0x0D Timetable
DP 预处理第 \(i\) 天翘 \(j\) 节课,当天剩下的课最少要花的时间。
背包转移,总时间复杂度 \(O(nk^2)\)。
0x0E Porcelain
与 0x0D 类似,背包转移时不枚举满即可,经典的背包优化。
0x0F Free Market
简化题意:店里有 \(n\) 个物品,你手中的物品总价值为 \(p\),初始时 \(p = 0\)。在一次交易中,你可以还回若干物品,再从店里拿走若干物品,使 \(p \gets q\),且有 \(p < q \le p + d\),求 \(p\) 能达到的最大值和达到该值的最小交易次数。
显然背包预处理店里物品能组成的所有价值的集合后贪心地更新 \(p\) 即可。

浙公网安备 33010602011771号