题解 P7065 【[NWRRC2014]Fragmentation】

· · 题解

考虑降序的必须断开,离散化后不连续的必须断开,序列就变成大概是若干递增串(称之为块,给这样的每个块编个号qwq)的形式,然后可以连起来的段要满足的性质(充要):

如果假设最开始全断的化,要最大化连的次数。

这个东西似乎很难做,每段并不是独立的,看样子需要按数值顺序做安排。

想到(我就想不到呜呜呜)如果 \le x 要如何连都安排好了,那么后续再连,前面对后面决策的可行性有影响的只有 (x - 1, x) 有没有连,连的哪个块:

因此我们可以设一个 DP:

别看是二维 DP,但实际的状态数应该是 O(n) 的,因为每一个状态都一一对应着一个块内连续对。

然后考虑转移,暴力转移是 O(n^2) 的。优化也挺显然,前后缀 \max 再加自身转移特判,每次转移做到 O(1)。(具体实现来回扫一遍双指针)

总复杂度 O(n)