给定一组具有相关权重的活动,选择将最大化总权重的一组非重叠活动
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
之前结束的活动。这就是为什么不需要遍历所有可能的选项。
我一直在思考和寻找这个问题的解决方案,在 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
之前结束的活动。这就是为什么不需要遍历所有可能的选项。