def minimumTotal(triangle):
"""
从下往上递推 一维动态规划
先保存最后一行元素作为初始值,再往上依次递推,
递推式:tmp[j] = min(tmp[j],tmp[j+1])+triangle[i][j]
其中i表示第i行,从n-2行开始,三角形有规律每行元素的个数=第几行+1(0行开始)
"""
n = len(triangle) ###### n行
tmp = triangle[n - 1]
for i in range(len(triangle) - 2, -1, -1):
for j in range(i + 1):
tmp[j] = min(tmp[j], tmp[j + 1]) + triangle[i][j]
return tmp[0]