P12196

首先,设操作后被覆盖的 \(t\) 个区间为 \([L_1, R_1], [L_2, R_2],\dots ,[L_t, R_t]\)。那么我们需要满足:

  • 操作后,所有滑墙拼起来恰好以形成这些区间。
  • 被解锁的区间的价值和小于等于 \(k\)

这样不好做,考虑弱化问题。这里说一下弱化问题的基本方法。对于满足 \(p\) 性质的元素集合 \(P\),如果我们要把它弱化为满足 \(q\) 性质的元素集合 \(Q\)(显然有 \(P \subset Q\)),需要满足对于任意的 \(x \in Q\) 都存在一个 \(y \in P\) 使得 \(y\) 优于 \(x\)。具体来说,在这道题中,我们可以把第一个条件弱化为“操作后,所有滑墙均为这些区间的子区间”。这样,问题就变得简单了起来。

考虑通过式子去刻画这些条件。显然,对于滑墙 \([l_i, r_i]\),如果存在一个 \(j\),满足 \([l_i, r_i] \subseteq [L_j, R_j]\),那么这个滑墙一定不用解锁,否则一定要解锁。同时,如果最长的滑墙的长度大于这 \(t\) 个区间中任意一个的长度,那么它无法被放下,这样是不行的。综上,这些条件等价于:

  • \(\sum\limits_{i = 1}^h c_i - \sum\limits_{i = 1}^h c_i \sum\limits_{j = 1}^t [[l_i, r_i] \subseteq [L_j, R_j]] \leq k\)
  • \(\max\limits_{i = 1}^h \{ r_i - l_i + 1 \} \leq \max\limits_{i = 1}^t \{ R_i - L_i + 1 \}\)

考虑 DP。设 \(f_{i, j, k}\) 表示考虑前 \(i\) 个位置,没被覆盖的位置有 \(j\) 个,上面的第二条限制满足情况为 \(k\) 时所有不用解锁的滑墙的价值和的最大值。转移时分讨第 \(i\) 个位置的覆盖情况,有:

  • \(i\) 被覆盖,则有 \(f_{i, j, k} \gets f_{i - 1, j - 1, k}\)
  • \(i\) 没被覆盖,枚举转移点 \(x\),记最长的滑墙的长度为 \(d\),则有 \(f_{i, j, k \land [d \leq i - x]} \gets f_{x, j, k} + \sum\limits_{p = 1}^h c_p [[l_p, r_p] \subseteq [x + 1, i]]\)

直接做的话时间复杂度为 \(O(h w^2)\),显然不能通过。

考虑优化。首先,我们转移的瓶颈在于第二个 DP 式子。考虑使用 经典套路,将区间 \([l_p, r_p]\) 的贡献挂在 \(r_p\) 上,再用线段树维护即可。

时间复杂度 \(O(w^2 \log w)\)

posted @ 2025-04-24 18:00  Eliauk_FP  阅读(14)  评论(0)    收藏  举报