好吧,我想通了。算法是(如果我错了,请纠正我):
for t in times:
if is_first(t):
best_candidate = None
else:
best_candidate = best(t - 1)
for interval in intervals if interval.end_time is t:
value_i = f(best(interval.start_time) + interval)
value_candidate = f(best_candidate)
if value_i > value_candidate:
best_candidate = best(interval.start_time) + interval
best(t) = best_candidate
return best(times[-1])
其中集合times, intervals
是间隔的潜在时间停止和间隔本身,并且f
是目标函数。
迭代之间的常数是:随着时间的推移迭代t
完成后,best(t)
以 结束的最佳调度t
。请注意,由于初始化步骤,best(t) == best(t - 1)
是可能的。另请注意,正如我的评论中那样,这仅在f
单调增加时才有效,因为f
它意味着根据之前的间隔应用于每个单独的间隔。我以这里的方式使用它作为速记。