我正在尝试解决加权区间调度问题。基本上,我想出了以下递归公式来获得最优解的长度:
optimum[i] = max(duration(intervals[i]) + opt[prior[i]], opt[i - 1])
prior[i] = 在当前区间开始之前完成的最新的不重叠的计划。
这个递归方法很好用,我得到了正确的解决方案。然而,我想得到实际的时间表,而不仅仅是长度。我该怎么做呢?我尝试从最大的p[i]值开始,并跟随指针直到我到达None / -1 / Null,但这并不总是有效。我认为我需要在解决上述递归问题时跟踪哪些区间需要保留,哪些需要丢弃。我尝试通过以下方式实现:
if (duration(intervals[i]) + optimum[prior[i]] >= optimum[i - 1]) {
optimum[i] = duration(intervals[i]) + optimum[p[i]];
retain[i] = true;
}
else {
optimum[i] = optimum[i - 1];
retain[i] = false;
retain[i - 1] = true;
}
但是这样做效果不好。
1
或0
开始,prior[0]
应为-1等等。此外,您应确保prior [i]
严格小于i
。 - notbadst = prior[st]
。我会更新它。可以吗? - notbadfor j in range(len(intervals) + 1):
吗?但这仍然不起作用。 :/ - Penny Mahar