'''
解题思路:
动态规划算法
dp[i][j]定义为:从左上角到当前位置的最短路径,m[i][j]当前位置上的路径值,
核心迭代公式为,
dp[i][j] = min(dp[i][j-1],dp[i-1][j]) + m[i][j]
即,到当前位置的最短路径 = 从上和从左方向来的路径的最小值 + 当前位置上的路径值
#=============================================================================================
'''
#
#
# @param matrix int整型二维数组 the matrix
# @return int整型
#
class Solution:
def minPathSum(self , matrix ):
# write code here
m = matrix
r = len(m)
c = len(m[0])
#print(r,c)
dp = [[0]*c for _ in range(r)]
dp[0][0] = m[0][0]
for i in range(r):
for j in range(c):
if (i==0 and j>0):
dp[i][j] = dp[i][j-1] + m[i][j]
elif (j==0 and i>0):
dp[i][j] = dp[i-1][j] + m[i][j]
else:
dp[i][j] = min(dp[i][j-1],dp[i-1][j]) + m[i][j]
#for i in dp:
# print(i)
return dp[-1][-1]