I\'ve got a numeric pyramid like this
7
4 8
1 8 9
2 4 6 7
4 6 7 4 9
4 9 7 3 8 8
routes: 32
every number indexed by
Think of your pyramid as a tree with the root at the top of the pyramid: I think you want the route with the maximum cost from the root to any of the leaf nodes (bottom of the pyramid). OK, it's not actually a tree, because a node may have two parents, in fact you can get to a node at level i
from at most two nodes at level i-1
.
Anyway, I think you can compute the route with the maximum cost by using dynamic programming. Let me rewrite your data in a matrix like way:
7
4 8
1 8 9
2 4 6 7
4 6 7 4 9
4 9 7 3 8 8
and let the missing elements of the matrix be 0. Let's call this matrix v
(for values). Now you can build a matrix c
(for costs) where c(i,j)
is the maximum cost for reaching the tree node at position (i,j)
. You can compute it with this recurrence:
c(i,j) = v(i,j) + max{ c(i-1,j-1), c(i-1,j) }
where c(h,k)
is 0 when you get to a position out of the matrix. Essentially we say that the maximum cost for getting to node at position (i,j)
is the cost of the node itself plus the maximum between the costs of getting to its two possible parents at level i-1
.
Here is c
for your example:
7
11 15
12 23 24
14 27 30 31
18 33 37 35 40
22 42 44 40 48 48
For instance, let's take i=3, j=2
:
c(3,2) = v(3,2) + max{ c(2,1), c(2,2) }
= 6 + max{ 23 , 24 }
= 30
From c
you see that the most expensive rout costs 48 (and you have two of them).