给定一个整数序列S
和N
一个正整数W
,找到一组不重叠的区间,使得它们的总权重正好是 W 并且它们的总和最大化。
For a chosen interval [i,j]:
- Weight([i,j]) = j-i+1
- Sum([i,j]) = S[i+1] + S[i+2] + ... + S[j].
例子
S = (12, 9, 1, 2, 8, -1), W = 4
Choose [1,2] and [4,5] with total_sum = Sum([1,2]) + Sum([4,5]) = 9 + 8 = 17
(12 9 _ 2 8 _)
这个问题听起来有点像背包问题和加权间隔调度,但我认为这可以通过更简单的方式解决。
我的想法是使用动态编程和 let P[i][k] be the maximum total sum of the first i elements, using only k elements
,答案是P[N][W]
,但我想不出子问题之间的关系。