将您的金字塔视为一棵树,根位于金字塔顶部:我认为您希望从根到任何叶节点(金字塔底部)具有最大成本的路线。好吧,它实际上不是一棵树,因为一个节点可能有两个父节点,实际上您可以在级别上访问节点i
级别上最多有两个节点i-1
.
不管怎样,我认为你可以通过动态规划来计算出成本最大的路线。让我以类似矩阵的方式重写您的数据:
7
4 8
1 8 9
2 4 6 7
4 6 7 4 9
4 9 7 3 8 8
并让矩阵的缺失元素为0。我们称这个矩阵为v
(对于值)。现在您可以构建一个矩阵c
(费用)其中c(i,j)
是到达位置处的树节点的最大成本(i,j)
。您可以使用以下递归式来计算它:
c(i,j) = v(i,j) + max{ c(i-1,j-1), c(i-1,j) }
where c(h,k)
当到达矩阵外的某个位置时,值为 0。本质上我们说的是到达位置节点的最大成本(i,j)
是节点本身的成本加上到达其两个可能父级的成本之间的最大值i-1
.
Here is c
对于你的例子:
7
11 15
12 23 24
14 27 30 31
18 33 37 35 40
22 42 44 40 48 48
例如,我们以i=3, j=2
:
c(3,2) = v(3,2) + max{ c(2,1), c(2,2) }
= 6 + max{ 23 , 24 }
= 30
From c
您会看到最昂贵的溃败花费 48(并且您有两个)。