【刷题笔记】CF1768F Wonderful Jump

【刷题笔记】CF1768F Wonderful Jump

题解

首先考虑 \(O(n^2)\) 的暴力 DP。
\(f_i\) 表示跳到 \(i\) 的最小花费,显然 \(f_i = \max(f_j + (j-i)^2)\times \min(a_j...a_i)\),接下来要优化他。

  • 性质1:每一步的区间最小值一定在左端或右端,并且不可能既在左端也在右端。

证明:对于一个区间 \([i,j]\),设它的区间最小值为 \(a_k\),则若从 \(i\)\(j\) 一步跳过去,花费为 \(a_k\times (i-j)^2\),而若 先跳到 \(k\) 再跳到 \(j\),则花费为 \(a_k\times ((i-k)^2 + (k-j)^2)\),花费是更少的。
在考虑一个区间 \([i,j]\),期中 \(a_i,a_j\) 都是区间最小值,则先从 \(i\)\(i+1\) 再从 \(i+1\)\(j\) 的花费为 \(a_j + (j - i - 1)^2\times a_i\),一定比一步跳过去更优。

  • 性质2:对于一个最小值 \(a_i\),一定满足他前面和后面的一次跳跃长度一定不会超过 \(n \over a_i\)

证明:对于一次长度为 \(d\) 的跳跃,花费最多为 \(n\times d\),因为可以将这一次跳跃断成 \(d\) 次长度为 \(1\) 的跳跃,所以要想使得这一次跳跃比 \(d\) 次跳跃更优,则要使得 \(a_i\times d^2\le n\times d\) 可得 \(d\le \frac{n}{a_i}\)

因此我们就可以将 DP 优化到 \(O(n\sqrt n)\) 的时间复杂度。
具体实现:发现 \(d\)\(a_i\) 的乘积是一个定值,所以可以利用根号分治。
对于 \(a_i\ge \sqrt n\)\(d \le \sqrt n\),直接暴力跳就可以;
对于 \(a_i\le \sqrt n\),往左跳直到最小值不再是 \(a_i\),此时以 \(a_i\) 为最小值的区间长度 \(\le n\),而最多有 \(\sqrt n\)\(a_i\),所以总长度 \(\le n\sqrt n\)

posted @ 2025-07-13 09:31  GuoSN0410  阅读(9)  评论(0)    收藏  举报