好吧,我想通了。算法是(如果我错了,请纠正我):
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它意味着根据之前的间隔应用于每个单独的间隔。我以这里的方式使用它作为速记。