題目要求:
矩陣大小為m * n,行數m,列數n,需要從左上角走到右下角,每個路徑上的數字代表的是路徑數值,求最小路徑和。
分析:1)同樣以動態規劃來分析,從左上角走到右下角,任取乙個i、j,易得知想要走到該位置,前一步只能是 [i-1][j],或者[i][j-1],那麼動態規劃的通式易得知,
min_sum[i]
[j]= math.
min( min_sum[i-1]
[j]+ a[i-1]
[j], min_sum[i]
[j-1]+
[i][j-
1]
2)空間優化:思路已定,不難得出,在第一行,或者第一列,都只有一條路可選,考慮能否先定義完第一行,再由第一行,一行一行的得出剩下的矩陣值。本題隨意取第一行,如要做到極致壓縮空間的話,則取行列數比較間較小的那個,行數較小則先控制第一行,列數較小先控制第一列。
**實現:
public
intmin_path_sum
(int
m)//如何通過第一行得到一行行得到後面的資料?
//核心:在分析過程中的dp[i-1][j] 和dp[i][j-1]分別是哪個,如何取得?
for(
int i =
1; i < m.length; i ++)}
return m[n]
[m];
}
核心思想:
本題中最重要的思想為:將原本的二維陣列壓縮為一維陣列,這種思想幾乎可用於所有動態優化中空間壓縮問題。
動態規劃 矩陣最小路徑和
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 個整數表示矩陣。輸出描述 輸出乙個...
矩陣的最小路徑和 動態規劃
題目描述 給定乙個 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 我的...