【ARC#226】B题题解

· · 题解

从大到小枚举物品体积,设现在物品体积为 $2^i$,设它与比它大的所有物品的体积(前缀体积)等价于 $s$ 个体积为 $2^i$ 物品。考虑直接放进 $n$ 个袋子,则最终答案一定不小于理想的 $\lceil \frac{s}{n}\rceil\times 2^i$。 感想 @[rabbit_mygo](https://www.luogu.com.cn/user/1678847) 的正确性证明。 归纳法证明,$i=m−1$ 时正确性显然。 考虑一个贪心:从大到小考虑物品。每次优先放入使用体积最小的袋子。则体积为 $2^i$ 的物品能产生贡献,当且仅当现在所有袋子的使用体积均为 $v$。而 $v$ 一定是 $2^i$ 的倍数,故将更大的物品拆成体积为 $2^i$ 不会使得答案变小。 既然理想情况没有变小,那么就是真实下界。 ```cpp ans=sum=0; for(int i=m-1;i>=0;--i){ sum*=2; sum+=a[i]; ans=max(ans,(sum+n-1)/n*(1ll<<i)); } printf("%lld\n",ans); //……如此强大…… //只要你想,就可以做到。 //但知道这悲惨的理念之后,你还能挥起你的骨钉吗?要是你知道了自己的身世呢?…… //那就放手去做吧,圣巢的鬼魂!前进。去把那标记印在你的外壳上,然后称王。 ```