1 条题解
-
1
容易看出贪心。
考虑如何尽量少改背包。容易想到,先排一遍序,然后对于每一个物品,选择体积不小于它的最小的那个背包,这样可以尽可能少地改背包。
但这样是不对的,因为如果我们从小到大枚举的话,小的物品可能把本来能用于大的物品的背包占用了,大的物品占了更大的背包,最终导致最大的物品需要更改背包,这样的话总体积并不是最优的。
于是我们考虑从大到小枚举,可以维护一个堆,从大到小枚举物品,对于每一个物品,将所有能装它的背包压入堆中,取出一个最小的背包即可。如果没有比他更大的了,那么就 K--,就是更改一个背包,换到最后,如果 K<0了,就意味着不可行,输出 -1,如果 K 还有剩余,我们就可以对之前那些虽然满足但不是最优的物品进行更改背包(背包体积大于物品体积)。这里也可以用一个堆来维护,每次取出相差最大的换上即可。
信息
- ID
- 799
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 113
- 已通过
- 7
- 上传者