给定S
整数N
和正整数W
的序列For a chosen interval [i,j]:
- Weight([i,j]) = j-i+1
- Sum([i,j]) = S[i+1] + S[i+2] + ... + S[j].
,找到一组非重叠区间,使得它们的总权重正好为W,并且它们的总和最大化
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 _)
实施例
P[i][k] be the maximum total sum of the first i elements, using only k elements
这个问题听起来有点像背包问题和加权间隔调度,但我认为这可以用更简单的方式解决。
我的想法是使用动态编程并让P[N][W]
,答案是{{1}},但我无法想出子问题之间的关系。
答案 0 :(得分:1)
如果你从左到右工作,你可以通过陈述来总结一个答案:
1)它的重量
2)该答案中最右边间隔的右端
3)其间隔中元素的总和
所以我认为你可以用一个从左到右运行的动态程序解决这个问题,如果在每个阶段,对于最右边间隔和总重量的右端的每个可能组合,你用最大的总和来跟踪答案。
答案 1 :(得分:0)
不应该是:
f[i][j]= MAX( f[i-1][j] , f[i-T][j-Weight[i-T,i]]+Sum[i-T,i] );
然后你在f[N][W]
得到答案。我很确定应该有一些方法来优化这个O(N^2W)
解决方案以获得更好的解决方案。但既然你没有要求更快的......