根本不需要使用 DP,贪婪的解决方案就足够了,尽管它比 1-resource 问题稍微复杂一些。
在这里,我们首先按结束时间对间隔进行排序,较早的时间在前。然后,在资源中放置两个“哨兵”间隔,结束时间均为 -∞。然后,继续抓取 x.end 最低的区间 x,并遵循以下规则:
- 如果 x.start 在我们两个资源中的两个结束时间之前,请跳过 x 并且不要分配它,因为 x 不适合
- 否则,让 x 覆盖其端点为 最新 且仍在 x.start 之前的资源
规则 2 中的贪心策略是这里的关键点:我们要替换 latest 结尾的已用资源,因为这样可以最大化我们在 other 中的“空间” em> 资源来适应具有较早开始时间的未来间隔,从而严格地使未来间隔能够适应。
让我们看一下问题中的示例,区间 (1,4)、(5,10)、(6,12) 和 (11,18) 已按排序顺序排列。我们从两个具有 (-∞,-∞) 作为“哨兵”区间的资源开始。现在取第一个区间 (1,4),看看它是否合适,所以现在我们有资源 1 具有 (1,4) 和资源 2 具有 (-∞,-∞)。接下来取(5,10),这两个资源都可以放,所以我们选择资源1,因为它结束最晚,现在资源1有(5,10)。接下来,我们取 (6,12),它只适合资源 2,所以资源 2 有 (6,12)。最后,取 (11,18),它适合资源 1。
因此,我们已经能够使用贪婪策略来拟合所有四个区间。