dp[i][j]:从(0,0)走到(i,j)
dp[i][j]:从i走到j,当步长不为一时
数字三角形:
自底向上:
i,j<—i+1,j or i+1,j+1
l=[]
n=len(l)
dp=[[0*(i+1)] for i in range(n)]
for j in range(n-1):
dp[n-1][j]=l[n-1][i]
for i in range(n-1,-1,-1):
for j in range(i+1):
dp[i][j]=min(dp[i+1][j],dp[i+1][j+1])+l[i][j]
print(dp[0][0])
自顶向下:
i,j<—i-1,j or i-1,j-1
l=[]
n=len(l)
dp=[[0]*(i+1) for i in range(n)]
dp[0][0]=l[0][0]
for i in range(1,n):
dp[i][0]=dp[i-1][0]+l[i][0]
dp[i][i]=dp[i-1][i-1]+l[i][i]
for i in range(2,n):
for j in range(1,i):
dp[i][j]=min(dp[i-1][j],dp[i-1][j-1])+l[i][j]
return min(dp[n-1])