(weight, value)。允许选择不超过 m 个箱子,目标是最大化:
sum(weights_of_chosen) * min(value_of_chosen)。value 从大到小排序,把当前箱子的 value 视作被选集合的最小价值阈值。weight 到一个小根堆(只保留不超过 m 个最大的重量),同时维护堆中重量和 sumW。value 作为最小价值,候选答案为 sumW * value。
这样自然覆盖了选择 1…m 个箱子的所有情况(当堆里元素少于 m 时,即为“少于 m 个”)。小张拥有 n 箱货物,每箱货物有两个属性:重量 weight 和价格 value。一位收购商提出了一种特殊的收购方式:小张最多可以卖出 m 箱货物,收购商将以这些被卖出箱子中价格最低的那一箱的价格作为统一的收购单价,而不是按每箱各自的价格分别结算。
如果小张选出了若干箱货物,设这些箱子的总重量为 S,它们中的最小价格为 Vmin,那么本次能够获得的收益为 S×Vmin。请帮助小张决定应该卖出哪些箱子,使得收益最大。
由于收益数值可能很大,最终需要输出收益对 1000000007 取模后的结果。
约束条件:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册