"""
64. 最小路徑和
https://leetcode.cn/problems/minimum-path-sum/
題目分析:
這題驗度是中等,是DP的基本應用
理論: dp
因爲題目是獲取最小和,所以轉移方程如下:
dp[i][j]=min(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j])
注意/難點:
na
"""
import numpy as np
class Solution:
def minPathSum(self, grid:list) -> int:
m=len(grid) #行數row
n=len(grid[0]) #列數column
dp=[[0]*n for _ in range(m)] #初始化dp
dp[0][0]=grid[0][0] #初始化
#預處理首行
for j in range(1,n):
dp[0][j]=dp[0][j-1]+grid[0][j]
#預處理首列
for i in range(1,m):
dp[i][0]=dp[i-1][0]+grid[i][0]
for i in range(1,m):
for j in range(1,n):
cur=grid[i][j] #當前值
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+cur #轉移方程
print(np.array(dp))
return dp[m-1][n-1]
grid = [[1,3,1],[1,5,1],[4,2,1]]
# grid = [[1,2,3],[4,5,6]]
ans=Solution().minPathSum(grid)
print(ans)
dp的輸出模擬結果
[[1 4 5]
[2 7 6]
[6 8 7]]