'''
解题思路:
动态规划算法
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]