Recurrence Relation for Dynamic Programming Exercise
我收到了一份动态规划作业,我需要帮助找出递归关系。该问题类似于加权区间问题,但它有一些额外的限制:
-
您将获得一系列
N 时隙,每个时隙都相同。 -
每个时隙
k ,0 <= k < N ,被赋予一个正权重W[k] 。 -
对于具有
i < j 的任何时间间隔[i, j] ,该间隔的权重W[i,j] 为:
W[i,j] = W[i+1] + W[i+2] + ... + W[j]
请注意,第一个时隙的权重W[i] 不计算在内,因此任何长度为1 的区间的权重为0 。
给你一个值
示例:对于
这是一个很好的小问题...如果选择的最后一个插槽(最后一个范围的结尾)是 i 并且在插槽 0..i 中恰好有 t,则将 S(i, t) 定义为可能的最大权重已选择插槽。
DP 决定是我们要么将 w[i] 添加到 S(i, t) 中,要么不添加,因为要么选择了插槽 i-1,要么没有选择。所以我们有:
1 | S(i, t) = max ( S(i-1, t-1) + w[i], S(j, t-1) for j = t-2..i-2 ) |
t-1>i 无意义的情况。所以基本情况是 S(i, 1) = 0 for 0 <= i < N,并且 DP 表的连续列 (t = 2,...,T) 每列都比最后一列短。期望的答案是 max ( S(j, T) for j = T-1..N-1 )
很高兴您可以安排计算,以便增量计算最大值,运行时间为 O(NT),空间为 O(N)
根据您的示例,DP 表如下所示:
1 2 3 4 5 6 7 8 | t = 1 2 3 4 ------------------ i = 0 | 0 1 | 0 9 2 | 0 1 10 3 | 0 1 9 11 4 | 0 7 9 16 |
答案是 max(11, 16) = 16