Думайте о своей пирамиде как о дереве с корнем в верхней части пирамиды: я думаю, что вам нужен маршрут с максимальной стоимостью от корня до любого из листовых узлов (дна пирамиды). ОК, на самом деле это не дерево, потому что у узла может быть два родителя, фактически вы можете добраться до узла на уровне 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) }
, где c(h,k)
равно 0, когда вы попадаете в позицию вне матрицы. По сути, мы говорим, что максимальная стоимость доступа к узлу в позиции (i,j)
- это стоимость самого узла плюс максимальная стоимость доставки его двум возможным родителям на уровне i-1
.
.
Вот 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
С c
вы видите, что самый дорогой маршрут стоит 48 (а у вас их два).