首页 > 其他分享 >CF1768F

CF1768F

时间:2023-12-23 21:55:27浏览次数:32  
标签:limits min 复杂度 sqrt times leq CF1768F

dp+根号分治,配得上省选题的难度。

一眼 dp,虽然暴力肯定过不了,但是把朴素转移先列出来绝对没坏处。

\[dp_i=\min\limits_{1\leq j<i}(dp_j+\min\limits_{j\leq k\leq i}a_k\times v) \]

这个东西很难用 DS 维护,有 \(\min\) 的存在又很难斜优啥的,就想到有一种方法优化:限制可行状态数。

假设要求从 \(i\) 跳到 \(j\)。若一步从 \(i\) 到 \(j\) 是最优的,那么它的花费一定小于一步一步跳的花费,即

\[\min\limits_{i\leq k\leq j}a_k\times(i-j)^2\leq(i-j)\times n \]

这是因为值域上界为 \(n\)。

化简一下,得到

\[\min\limits_{i\leq k\leq j}a_k\leq \frac n{i-j} \]

看到分数就可以想到根号分治。

  • \(i-j\leq\sqrt n\) 时,暴力枚举 \(j\) 转移。时间复杂度 \(O(\sqrt n)\)。

  • \(i-j>\sqrt n\) 时,枚举 \(\min\limits_{i\leq k\leq j}a_k\)。又因为有一个性质:最优情况下一定有 \(k=i\) 或 \(k=j\)。因为 \(((i-k)^2+(k-j)^2)\times a_k\leq(i-j)^2\times a_k\)。这时又可以分两种情况。

  • \(k=j\) 时,记录每一个 \(\leq \sqrt n\) 的数上一次出现的位置,每次枚举转移。时间复杂度 \(O(\sqrt n)\)。

  • \(k=i\) 时,如果 \(a_i\leq \sqrt n\),从 \(i\) 往前暴力枚举转移,直到遇到一个 \(a_k\leq a_i\) 为止。这一部分的复杂度呢?根据楼上大佬的说法,“对于 \([1,\sqrt n]\) 内的每个值,最多可能扫完整个序列一次”。所以均摊复杂度 \(O(\sqrt n)\)。

总时间复杂度 \(O(n\sqrt n)\)。其他的不说,这个分讨的复杂度太优美了。

Submission

标签:limits,min,复杂度,sqrt,times,leq,CF1768F
From: https://www.cnblogs.com/yinhee/p/CF1768F.html

相关文章

  • [CF1768F]Wonderful Jump
    WonderfulJump题目看错了,以为能往回跳......暴力转移式\[dp_i=min(dp_i,dp_j+\min_{k=j}^ia_k\times(i-j)^2)\]你会发现这个没啥单调性,不好用数据结构维护。所以考虑发掘性质,设\(x=\min_{k=j}^ia_k\),那么一个宽松的上界是\((i-j)\leq\lfloor\frac{n}{x}\rfloor\)对于......