有显然的 dp 方程
dpi,k=minj=1i(dpj−1,k−1+(i−j+1)maxp=jiap)
由于涉及区间最大值我建了一棵大根笛卡尔树。
算的时候,把每个区间的最大值拎出来,先递归左儿子,然后用左边更新自己,再用左边和自己一起更新右边,再递归右儿子。这样应该是不漏的。
考虑更新右边怎么做,现在已知了左半部分所有的 dp 值,并且分段到右边任意节点的最大值都固定为了 au ,也就是说要对于右边每个点 i 找到直线 k=au,b=dpj−1,k−1−j×au[j∈left_son⋃{u}] 在 i+1 的最小值。
注意到他们的斜率是一样的,这等同于找到截距 dpj−1,k−1−j×au 的最小值,这个可以用普通的李超树维护,因为 (−j,dpj−1,k−1) 是固定的,不会改变了。
这样直接用同一个最小值更新右边所有 dp 值,然后和右儿子传回的李超树合并,再回溯到父亲。
复杂度是 nklogn 的
但是尝试打了一下,三个样例都寄了(。
想问一下这个思路的正确性在哪一步出了问题。
(现在脑子有点糊如果是神笔问题浪费您的时间请见谅)