题意
有一个贪心求最大子段和的方法,将负数位置去掉,比较各段和的最大值
现给出长度为(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))