【发布时间】:2016-11-25 23:38:29
【问题描述】:
让我们假设我们有 n 个时间表。每个时间表 i 都有一个权重 w(i) 、一个准备时间 prep(i) 和一个休息时间 rest(i) 。
准备时间意味着如果我们选择时间表 i ,我们有义务不选择时间表 i - prep(i) , i - prep(i) + 1 ... i-1 。
休息时间意味着如果我们选择shdule i,我们有义务不选择shedule i+1 ,i+2 ... i+rest(i)
我们的任务是根据上述限制选择合适的时间表,以最大化W。
注意:对于 i=1 ,我们忽略 prep(i) 。我们假设我们已经准备好了。对于 i=n wh 忽略 rest(i)。
限制:一个时间表的准备时间可以与另一个时间表的休息时间重叠。举个例子,如果我们有 rest(5)=2 , prep(8)=2 ,我们可以选择两个时间表。 rest(5)=2 表示如果我们选择 5 ,我们不允许选择 6 和 7 。 Prep(8)=2 表示如果选择 8 ,则不允许选择 6 和 7 。所以我们可以选择 5 和 8。
什么算法最适合这个任务?
如果没有限制,我们可以说每个时间表都有开始时间 i - prep(i) 和结束时间 i + rest (i) 。我们将有一个加权活动选择问题,因此我们可以使用贪心算法获得最优 O(nlogn)。但是限制破坏了我的计划。
【问题讨论】:
标签: algorithm