用排序的贪心一般用微扰法(邻项交换)。
每次决策都是类似的结构的贪心,可以用归纳法证明。
check(x)表示能否将数列分成不超过\(M\)段,每段和的最大值不超过\(x\)。
首先\(ans\)肯定是满足这个判定的,而且小于\(ans\)的分法,分成\(M\)段都不行,分成更少段只会让和的最大值更大,肯定也是不满足判定的。
\(t>ans\),\(ans\)满足判定的方案,也是\(t\)满足判定的方案,因为\(sum_{max}\le ans < t,sum_{max}\le t\)。
有不超过\(M\)段的不超过,就是为了构造单调性。
check使用了贪心,每次决策都是选择连续地一段,考虑归纳法证明。
假设已经分了\(k\)段,并且这样分能够包含最优解(决策包容性),现在分第\(k+1\)段。

进行如上调整后,可以将任意解变成\(k+1\)段贪心选择的方案(\(k+1\)段和不超过,\(k+2\)段和变小,肯定也不超过\(x\)),而且段数没有变多,所以贪心解就是最优解。
可以反证来理解:假设此段非贪心选法取得最优解,而贪心选法不能取得最优解,通过调整会发现非贪心选法取得的最优解,也可以被贪心选法取到,于是矛盾。