这是一个在我大学课堂上的“快速测试”中没有人能够正确回答的问题:
我们得到:
int N < 1000 个时间槽
int[] C: -10 000 <= C[i] <= 10 000 对应每个槽的支付
int T:我们必须使用的插槽数
问题表述如下:
一个懒惰的工人在整个工作日中有 N 个时间段。
对于每个时间段,他都会获得一定的报酬(C[i] - 不切实际地,它也可能是负数)。
他想选择正好 T 个时隙的区间,这样他就能得到最大的报酬。我们必须选择他将工作的间隔。例如 [1, 4] - 从第一个插槽到第四个。
问题是,他每次休息,回来上班,他工作的第一个时段是不会发工资的,因为他又开始习惯工作了,就像一个懒人一样。因此,我们也可以选择像 [5, 5] 这样的空区间,如果我们有负支付,这可能会派上用场。无论事先与插槽关联什么付款,这些都将获得付款 0。
为了更清楚,我将举一个简单的例子:
假设我们有 N=5 个时隙,我们想选择 T=4。C={3, 9, 1, 1, 7}
最好的解决方案是区间 [1, 2];[4, 5] 总共支付 9+7=16
我们一共覆盖了 T=4 个时隙,解是有效的。