1 条题解
-
0
自动搬运
来自洛谷,原作者为

CarroT1212
chrono::system_clock::now().time_since_epoch().count()搬运于
2025-08-24 23:15:31,当前版本为作者最后更新于2025-05-10 20:27:50,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
最终的 形态一定是所有极长的相等段上下交替。朴素的 DP 是 表示前 个处理完,,当前的 相等段为下/上时的最小代价。
容易转移:$dp_{i,j,0}=\min(\min\limits_{k>j}\{dp_{i-1,k,1}\},dp_{i-1,j,0})+|a_i-j|$,$dp_{i,j,1}=\min(\min\limits_{k<j}\{dp_{i-1,k,0}\},dp_{i-1,j,1})+|a_i-j|$。
光是状态数就爆炸了,显然需要从 DP 性质入手。
有聪明的选手猜了一下 只可能取某个 ,没拿到什么分。
有更聪明的选手猜了一下 只可能取某个 ,获得了 的分。
有非常聪明的选手猜了一下 只可能取某个 内的 的 ,获得了满分。

我估计一个合理的猜测思路是,手玩感觉取到 没什么含义,然后做 的分发现长度超过 的连续段一定可以被替换成其它情况,于是就猜到了。
下证:DP 中每个 只保留 为 的 的情况不影响答案正确性。证明大部分参考自官方题解,一些图示可以对着官方题解看一看,这里就不贴了。
考虑最终的 形态。
如果 满足其中没有任何 使 ,则称其为坏区间;称 中,大于两侧值的一段极长的相等区间 为峰,小于两侧为谷。称峰/谷的高度为对应的 值。
一定存在一个代价最优的 满足:
- 性质 1. 峰 内没有任何一个 (即不在峰两端)的 ,小于这段峰的高度。
- 这样的 单开一个谷的代价显然是更小的。
- 性质 2. 峰 内满足 的的坏区间 ,长度至多为 。
- 根据性质 1,设 里的 均大于峰的高度。假设存在坏区间 长度至少为 。不妨只考虑 的情况。
- 设 为峰高,。把 的 取值改为 ,那么 不再是坏区间,而代价不劣。
- 性质 3. 峰 内满足 的的坏区间 ,长度至多为 。
- 类似性质 2。可以把 内的 改为 。
- 由性质 3 同理可证峰内 的坏区间 长度至多为 。
- 性质 4. 整个峰 为坏区间,当且仅当(建议先看证明)$l=r\wedge a_l<b_l\wedge (b_{l-1}+1=b_l\vee b_{l+1}+1=b_l)$。
- 考虑一个坏峰。设其中大于峰高的 个数为 ,小于峰高的 个数为 。
- 如果 ,这时可以把峰高提升到 内 的最小值,峰不再是坏区间,且代价一定不劣。由性质 1 得 ,所以 长度 时一定 。
- 否则 ,这时 长度最多为 。峰高整体变化的话需要降低才不会让代价增加。
- 如果峰高可以无障碍降低到 ,那么也没问题。
- 可如果降低的过程中出现了 或者 ,那再整体降低一步这个峰就不存在了。这不是我们想要的。
- 但是由于一定有 且 ,我们可以缩短这个峰的长度。具体来说,如果 ,则 ,于是可以让 左侧的谷往右扩张一位( 就新建一个谷)。容易发现这并不影响谷的合法性,同时还把峰转化为了 的情况。 同理。
- 所以一个峰无法这样调整为非坏区间的条件,就是上面说的了。
- 同理,谷也有类似的以上几条性质。
- 性质 5. 时,若 为峰, 为谷,则它们不能同时是坏的。
- 若它们都是坏的,有 且 。
- 如果 ,直接把 同时降低 即可。
- 否则,把 都改为 。
- 由性质 5 可以推出一个坏峰两端不可能都是坏谷,坏谷两端也不可能都是坏峰。
- 根据前面的所有性质,坏区间最长最极限的情况是:一个长度 的谷的后三位 + 坏峰 + 坏谷 + 一个长度 的峰的前三位。峰谷可互换。
- 那么这时这个坏区间里的所有 ,一定都满足 等于 范围内的某个 。得证。
相信有了这个结论之后你是知道怎么写代码的。
哎其实感觉证明还是比较有意思的,只是这种结论出现在 OI 题里区分度就成玄学了,不过 BOI 场上好像也没几个人想到这东西。
但有人把这个阈值取 也过了。应该是情况还可以继续进行一些非人力所可及的细分。
- 性质 1. 峰 内没有任何一个 (即不在峰两端)的 ,小于这段峰的高度。
- 1
信息
- ID
- 12228
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者