1 条题解
-
0
首先,我们考虑伐木的过程。
可以发现,对于相同木材的固定顺序,最终结果仅取决于其中先完成任务的伐木工在最后等待的时间。此时另一个伐木工正在加工最后一块木材。
我们考虑取出最后的哪一块会最优。不难发现,我们将最长的木块留到最后肯定不劣,感性理解一下就是前面两人一直在工作,只有最后可以浪费等待时间,让另一个人的等待时间尽量长。
设之前两个伐木工一个用时为 ,另一个为 ,最后总答案即为 。 贪心的考虑,我们显然是让 越接近 越优。
问题转化为,去掉最长的一条木材后,使每段木材的长度之和尽可能接近除最长木材之外的其他长度之和的一半。这是一个多重背包问题,使用二进制分组优化与
bitset即可通过。
首先,可以证明。若我们钦定了两位伐木工人砍伐的木材,那么一定可以构造出一种排列,让木材按从短到长的顺序加工。证明大概就是若一个人加工好了,就在后面接上他需要的下一根长度的木材,直到最后。
以上的做法都是基于,存在最优解,是由最长的木材最后加工得到,而不会有一些情况使得会有不是最长的时间若干个木材堆积起来,时间超过了最长的木材。且能构造出这样的方案。
现在我们来证明这个结论。
假设现有的最优解不满足该条件,设第一人完成的长度为 ,第二人完成的长度是 ,两数组按升序排列。此时有 。
由于需要满足题目所给要求,还需满足:
- 若两者相等,不妨将 移动到 会得到更优解,矛盾。
- 若左边小于右边,分为两种情况。
- 。不妨改为 与 。
- 。不妨改为 与 。
都与假设矛盾,因此得证。
- 1
信息
- ID
- 3404
- 时间
- 4000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者