CF436E Cardboard Box 题解

· · 题解

前言:借鉴了 @George1123 的做法,在此基础上改良,另外变得好理解了。经过改良,我的做法比他的做法快了 4 倍,目前是最优解。

大体思路:

需要权衡的是直接花 b_i2 个星星还是花 2 个不同的 a_i2 个星星,如何对比这两种情况哪个更优是最大的问题。

2 个小根堆维护 a_ib_i 的最小值,然后开始贪心。

贪心过程:

目的是要选当前最优,设当前 q_a 堆的最小值为 a_{min}q_b 堆的最小值为 b_{min},可以假设它们不是同一个 i

显然直接比较 \frac{b_{min}}{2}a_{min} 的大小是不对的,因为可能 a_{min} 所对应的 b 的值比 a_{min} 大不了多少。

于是又取出 q_a 堆除去 a_{min} 的最小值 a_{min2},也可以假设 a_{min2}b_{min} 不是同一个 i

现在可以直接比较 a_{min}+a_{min2}b_{min} 的大小了。因为现在要选 2 个星星出来,这两种必定有一种是最优情况。

考虑分类讨论:

小细节: