矩陣的最小路徑和 動態規劃

2021-10-14 01:50:00 字數 886 閱讀 6952

題目描述:

給定乙個 n * m 的矩陣 a,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,輸出所有的路徑中最小的路徑和。

示例:

[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]

返回值:

備註:

1<=n,m<=2000

1<=arri,j

<=100

我的初始思路是想從左上角(0,0)開始出發,每一步比較右邊和下邊元素的大小,哪個小往那邊走,一直走到右下角(n-1,m-1)為止。這個思路是錯誤的。

反例如下:

如果按我的初始思路,應該是紅色路線,最終得到結果是11。而按藍色路線最終得到的結果是10,比紅色路線的結果更小。因此紅色路線不是最小路徑和。

c++實現:

int

minpathsum

(vector

int>

>

& matrix)

for(j =

0, i =

1; i < n; i++

)//第一列只能通過不斷下移得到

for(i =

1; i < n; i++

)//中間元素比較從上面和從左邊過來哪個路徑和更小就取哪個值

else}}

return matrix[n -1]

[m -1]

;//矩陣最小路徑和

}

動態規劃 矩陣最小路徑和

int min int a,int b int getmin vector map,int n,int m dp 0 0 map 0 0 for int i 1 i m i dp 0 i dp 0 i 1 map 0 i for int i 1 i n i dp i 0 dp i 1 0 map i...

動態規劃 矩陣最小路徑和

演算法專題導航頁面 題目描述 給定乙個 n m 的矩陣 a,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,輸出所有的路徑中最小的路徑和。輸入描述 第一行輸入兩個整數 n 和 m,表示矩陣的大小。接下來 n 行每行 m 個整數表示矩陣。輸出描述 輸出乙個...

遞迴和動態規劃 矩陣的最小路徑和

給你乙個二維陣列,二維陣列中的每個數都是正數,要求從左上角走到右下角,每一步只能向右或者向下。沿途經過的數字要累加起來。返回最小的路徑和。解 暴力遞迴 因為是從左上角到右下角,只能向右或者向下,可以使用遞迴,把問題簡化為 當前位置 i,j 和右邊位置 i 1,j 和下面位置 i,j 1 之間的問題 ...