问题是我有经典的加权区间调度问题,但还有一个额外的要求。这个要求是,从给定的工作中,必须完成一些工作。
我已经用暴力破解了它。但我需要更有效的解决方案。我用动态规划解决了经典的加权调度问题。但是我不能这样做。你有什么建议吗。谢谢你的建议。
答案 0 :(得分:0)
根据经典调度问题添加一个维度
该维度给出了到目前为止已完成的作业数量
例如
f [i] [j]表示在时间i,j工作完成后,最大利润是什么
f [i] [j]可以决定f [job_end_time [k]] [j + 1]给定job_start_time [k]> = i
答案 1 :(得分:0)
好吧,我不知道这个问题与经典的加权区间调度有什么不同。如果“必须完成”工作不重叠(如果他们那么你有不明确的问题 - 如何在两个重叠的“必须完成”工作之间进行选择?),那么你只需要一种方法来使他们的相对权重站立在剩下的工作中。
您可以在O(n)中遍历您的工作,并找到最大重量。然后,对于“必须完成”的工作,您需要将最大值添加到其权重中。这将确保他们将被选中任何其他工作,因为他们的相对权重肯定会高于非优先工作。
正如我所说,唯一的问题是当“必须完成”工作重叠时。在这种情况下,你将以一些未选择的工作结束(因为你必须选择一个工作而不是另一个)。