杂题
题意
有一个贪心求最大子段和的方法,将负数位置去掉,比较各段和的最大值
现给出长度为\(2n-1\)的序列,对于奇数位置,已经有数了,你需要在偶数位置填入\(\in[-K,K]\)的整数,求正确答案与贪心答案最大差
\(n\le 5000,K\le 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_j\Longrightarrow sum_i\ge f_{k-1,j}+sum_j\)
由于\(sum_i\)是不降的,故分界点也不降
于是可以做到\(O(n^2)\)