我有这个问题:
给定如上所示的球体金字塔,其中每个球体都有一个相关的数字(正数或负数),代表其得分。玩家可以选择金字塔内的任何球体,并且总分将根据其正上方的球体计算。
玩家可以获得的最高分数是多少?
这是N = 6
金字塔的一个例子游戏插图:
要求:
必须使用动态编程解决需求号1。
解决方案:
首先,这是问题的符号/语言:
每个球体都用元组(i,j)
表示;其中i
表示级别(0<=i<=n
),j
是从左到右的球体位置。
v(i,j)
:(i,j)
,0<=j<=i<=N
的球体值。
p(i,j)
=“玩家选择球体时的总得分(i,j)
”,1<=i<=N
。
复发:
这是我为定义递归公式所做的:
p(i,j)=v(0,0)
,如果i=0
= v(i-1, j-1) + v(i-1, j+1)
,如果i>0 & 0 <= j < i + 1
如您所见,我正在尝试一些困难来指定递归公式来计算给定选定范围的分数。
定义它的一些想法或建议?
答案 0 :(得分:2)
看起来如果我们通过用前一级别p(i-1,j-1)和p(i-1,j)汇总当前值来尝试计算当前p(i,j),那么p(i-2, j-1)对左分支p(i-1,j-1)和右分支计算两次。要修复它,我们可以从结果中减去一个p(i-2,j-1):
p(i,j) = v(i,j) + p(i-1, j-1) + p(i-1, j) - p(i-2, j-1)
答案 1 :(得分:1)
也许
p(i == 0, j == 0) = v(0,0)
p(i,j) = p(i-1, j-1) + p(i-1, j) + v(i,j), if i>0 & 0 <= j < i + 1, otherwise 0
这是因为左上角的那个是j-1
,而右上角的那个是j
,我们还需要添加球体值。您似乎在左上角和右上角使用了v
而不是p
,但我们需要继续向上并递归计算值,直到达到i>0 & 0 <= j < i + 1
或0,0
条件为止
(抱歉写得不好,需要尽快入睡,欢迎编辑)