杂题

题意

有一个贪心求最大子段和的方法,将负数位置去掉,比较各段和的最大值
现给出长度为(2n-1)的序列,对于奇数位置,已经有数了,你需要在偶数位置填入(in[-K,K])的整数,求正确答案与贪心答案最大差
(nle 5000,Kle 10^5)

做法

结论1:每个位置要么填(-1),要么填(K)

对于已有数已经为负的情况,是可以分割的。考虑平凡情况:已有数均(ge 0)
(f_{k,i})为前(i)个位置,填了(k)(-1),贪心答案的最小值
(f_{k,i}=min{max(f_{k-1,j},sum_i-sum_j)})

结论2:固定(k,i),存在分界点,使得在([1,alpha])最大值为(sum_i-sum_j)((alpha,i))最大值为(f_{k-1,j})

固定(k),令(g_i)(f_{k,i})的分界点
结论3(g_i)是不降的

证明:
满足最大值为(sum_i-sum_j)的条件为(f_{k-1,j}le sum_i-sum_jLongrightarrow sum_ige f_{k-1,j}+sum_j)
由于(sum_i)是不降的,故分界点也不降

于是可以做到(O(n^2))

原文地址:https://www.cnblogs.com/Grice/p/13871320.html