The binary-number path representation simplifies the algorithm:
max-sum-path(triangle)
max-path = 0
max-sum = path-sum(triangle, max-path)
for path = 1 to 2N - 1
sum = path-sum(triangle, path)
if sum > max-sum
max-sum = sum
max-path = path
return [ max-sum, max-path ]