動態規劃 矩陣最小路徑和

2021-09-29 10:46:00 字數 1371 閱讀 7582

演算法專題導航頁面

【題目描述】

給定乙個 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 計算到達當前位置路徑,是在上一步的基礎上...