題目描述:
給定乙個 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 之間的問題 ...