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\) 即可。

posted @ 2022-04-07 13:24  johnsmith0x3f  阅读(12)  评论(0)    收藏  举报