1 条题解
信息
- ID
- 1660
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
从编号最大的物品向前考虑,并维护当前剩余容量 R 与已经确定选入的较大编号物品价值和 cur。
若 R<wi,物品 i 不可能选,只需继续;若 R≥wi,选择它后把 R 减去 wi、把 vi 加入 cur,而不选择它时,由 ∑j<iwj<wi≤R 可知所有更小编号物品一定能同时装下,又因为价值均为正,此分支的最优值就是 cur+∑j<ivj,可以当场更新答案而无需继续搜索。
依次记录每个“第一次放弃本可选物品”的分支,再加上始终选择所有能选物品的分支,就覆盖了全部最优候选。
预处理价值前缀和后,每件物品只处理一次,总时间复杂度为 O(N),空间复杂度为 O(N);价值总和最多为 6×1017,需使用 64 位整数。