Maksymalny trójkąt ścieżki (Python)

Mam trójkąt z dwustu rzędami, w którym muszę znaleźć maksymalną odległość, aby dostać się z góry na dół trójkąta.

   5
  9 8
 5 4 6
9 7 3 4

Najkrótsza odległość wynosiłaby tutaj 5 + 8 + 4 + 3 = 20. Maksymalna odległość wynosiłaby 5 + 9 + 5 + 9 = 28.

Mam dobry pomysł na algorytm, który chcę zaimplementować, ale staram się go przekształcić w kod.

Mój plan to: zacznij od drugiego do ostatniego wiersza, dodaj maksimum możliwych ścieżek z dolnego rzędu i przejdź do góry.

Na przykład powyższy trójkąt zmieni się w:

   28
  23 19
 14 11 10
9 7 3 4

Jest to znacznie bardziej wydajne niż brutalne wymuszanie, ale mam dwa ogólne pytania:

Używając brute-force, jak mam wymienić wszystkie możliwe ścieżki od góry do dołu (mogą się poruszać tylko do sąsiednich punktów)? Próbowałem tego użyć (trójkąt to lista list zawierających trójkąt):

points=list(itertools.product(*triangle))  

ale zawiera wszystkie możliwe kombinacje z każdego wiersza, nie tylko sąsiadujących członków.Project Euler # 18 - jak brutalnie wymusić wszystkie możliwe ścieżki w strukturze drzewa, używając Pythona? To nieco wyjaśnia możliwe podejście, ale chciałbym użyć itertools i innych modułów (tak pythonowych jak to możliwe)

Jak zmierzałbym do iteracji strategii dodawania każdego maksimum z poprzedniego wiersza i iterowania do góry? Wiem, że muszę zaimplementować pętlę zagnieżdżoną:

for x in triangle:
    for i in x:
        i+=? #<-Not sure if this would even increment it

edit:
what I was thinking was:
triangle[y][x] = max([triangle[y+1][x],triangle[y+1][x+1]])

questionAnswers(2)

yourAnswerToTheQuestion