给定一组具有相关权重的活动,选择将最大化总权重的一组非重叠活动

Given a set of activities, which have associated weights, choose the set of non-overlapping activities that will maximize the total weight

我一直在思考和寻找这个问题的解决方案,在 wikipedia

上找到了这个

解决方案建议为 i 找到完成时间 <= 开始时间的 activity。 但是,考虑这个例子:

开始时间:[1,2,3,4,5]

结束时间:[3,4,5,6,7]

各自的权重:[13,5,2,4,1]

对于这个例子,当我在 activity:(4-6) 时,我将有 2 个活动的完成时间小于 4,所以,而不是仅仅通过二进制搜索一个数字搜索,我们不应该 return 一个数组,然后从中取最大值。

如果我误解了这个概念,请纠正我。

根据文章,opt[i] = MAX(opt[i-1], opt[t] + w(i)),即 opt[i] 考虑了所有在第 i 之前结束的活动。这就是为什么不需要遍历所有可能的选项。