演算法專題導航頁面
【題目描述】
給定乙個 n * m 的矩陣 a,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,輸出所有的路徑中最小的路徑和。
輸入描述
第一行輸入兩個整數 n 和 m,表示矩陣的大小。
接下來 n 行每行 m 個整數表示矩陣。
輸出描述
輸出乙個整數表示答案。
示例1
輸入4 4
1 3 5 9
8 1 3 4
5 0 6 1
8 8 4 0
輸出12
備註
1≤n,m≤2000
0≤aij ≤100
【**實現 - cpp版】
#include
#include
#include
using
namespace std;
/* * 動態規劃
* 1. 確定可變引數:矩陣的兩個維度 -- 一旦確定,其返回值即代表乙個特定的最終狀態
* 2. 利用可變引數構建row * col二維陣列dp
* 其中row取值範圍:0, ..., n
* col取值範圍:0, ..., m
* 3. 確定最終狀態:dp[n-1][m-1]
* 4. 確定base case初始化二表: 矩陣的首行首列也即dp[0][...], dp[...][0]
* 5. 找出其他位置的遞推公式: dp[i][j] = min + vec_arr[i][j]
* 6. 依據上述遞推公式一次從第二行由左至右計算每個位置的值,返回右下角的值dp[n-1][m-1]
*/intminpaths
(const vectorint>> vec_arr)
// the first column
for(
int j=
1; j)// other scerios
for(
int i=
1; ireturn vec_dp[row-1]
[col-1]
;}intmain()
vectorint>>
vec(n, vector<
int>
(m,0))
;for
(int i=
0;icout <<
minpaths
(vec)
}
動態規劃 矩陣最小路徑和
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,從左上角開始每次只能向右或者向下走,最後到達右下角的位置,路徑上所有的數字累加起來就是路徑和,輸出所有的路徑中最小的路徑和。示例 1,3,5,9 8,1,3,4 5,0,6,1 8,8,4,0 返回值 備註 1 n,m 2000 1 arri,j 100 我的...
動態規劃 最小路徑和
給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。你在同一時間只能向下或者向右移動一步 樣例1 1 3 1 1 5 1 4 2 1 輸出 7 樣例2 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0 輸出 12 計算到達當前位置路徑,是在上一步的基礎上...