題目描述
給定乙個 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 表示從開始點到該點...