最小路徑和 cd186

2021-10-14 04:16:32 字數 1204 閱讀 4432

題目描述

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

輸入描述:

第一行輸入兩個整數 n 和 m,表示矩陣的大小。

接下來 n 行每行 m 個整數表示矩陣。

輸出描述:

輸出乙個整數表示答案。

示例1輸入

4 41 3 5 9

8 1 3 4

5 0 6 1

8 8 4 0

輸出12

備註:1≤n,m≤2000

0<=aij<=100​

#include

#include

using

namespace std;

int arr[

2007][

2007];

int dp[

2007][

2007];

intmain()

for(

int i=

1;i<=n;i++

) dp[i][1

]=dp[i-1]

[1]+ arr[i][1

];for(

int j=

1;j<=m;j++

) dp[1]

[j]=dp[1]

[j-1

]+ arr[1]

[j];

for(

int i=

2;i<=n;i++)}

printf

("%d"

,dp[n]

[m])

;return0;

}

滾動陣列優化空間

//滾動陣列優化空間 ,這裡是用列來優化,也可以用行來優化 

#include

#include

using

namespace std;

int arr[

2007];

int dp[

2007];

intmain()

// printf("\n");

}printf

("%d"

,dp[m]);

return0;

}

最小路徑和

給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。注意事項 你在同一時間只能向下或者向右移動一步 這道題和之前做的一道三角形的動態規劃差不多,但是更難一些,例a b c d e f g h i 如果要到i就必須從f 或h走,只要選出其中較小的即可,再用遞迴算出走每乙...

最小路徑和

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。1 動態規劃 1,要明白上邊界線的點只能由它的上乙個點向右移...

最小路徑和

題目 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。動態規劃 用乙個dp m n 表示從開始點到該點...