class Solution:
def minimumTotal(self, triangle: List[List[int]]) -> int:
n = len(triangle)
last = [1e12] * n
last[0] = triangle[0][0]
for i in range(1, n):
new_dp = [0] * n
for j in range(i + 1):
new_dp[j] = min(last[j - 1] if j - 1 >= 0 else 1e12, last[j] if j < i else 1e12) + triangle[i][j]
last = new_dp
return min(last)