如果 A 的执行系数 k_A 特别高昂而执行 B 的代价特别低廉,我们就用了执行一次 B 的代价把一个 16K_A 变成了 8K_A. 那显然代价会更小。
所以这个反人类的东西确实可能成立。但是我们怎么说明其单谷呢。首先考虑除了切割 A 还有没有别的形式使得添加一个 B 后代价更加低廉,我们得到的结论是“没有”。证明如下:
首先证明,如果 B 和其它早就有的 B 合在一起,那么 f 是不会变小的。这是因为如果最后 f 较添加前变小,去掉这个 B 的 f 应该更小,矛盾了。
那么这个 B 只可能单独为一段,才有可能更优秀。它影响不到别的 B 的答案,只能影响 A 的答案来让 f 变小。而影响 A 的答案,对于 B 来说,除了切割没有别的方法。证毕。
然后考虑说明其单谷性:
如果 f 不断上升,说明 B 对 A 的切割不再有效,此时后面 f 不再会下降。
所以如果开头 f 就上升,那么它就是不断上升的;如果开头 f 下降,要么它也不断下降上去,要么下降到一个点,开始上升,然后不断上升下去。所以 f 是单谷函数。证毕。
“这个引理想到后这个题就差不多了。”
确实,因为我们不难想到二分耗时机器最大的那台的最早结束时间。然后对于每台机器,确定了其 A 的台数,其最大能执行的 B 的台数是可以确定的。也就是说有 O(np) 个状态,然后继续设 g(i,j) 是前 i 个机器共做 j 台 A 能同时做的最大的 B 的数目。这个东西的确定就是 O(pn^2) 的。所以我们在 O(pn^2 \log n) 的时间内解决了这个问题。