方格巡遊
阿新 • • 發佈:2020-07-23
題目描述
你被困在一個寬N格,長M格的方陣中。現在,你需要從第(1,1)格移動到(N,M)格。每個格子有一個價格Cij,代表經過這個格子需要付出的代價。資料保證起點及終點的代價為0。每次移動可以從當前格子移動到上、下、左、右四個相鄰的格子(如果有的話)。現在問題來了:從第(1,1)
輸入格式
第1行包含2個正整數N,M。
接下來一個N*M的方陣,代表每個方格通過的代價。
輸出格式
一個整數:從第(1,1)格移動到(N,M)格的最小代價。
輸入樣例
2 3
0 1
2 1
2 0
輸出樣例
2
資料範圍
30%的資料保證1≤N*M≤10.
100%的資料保證1≤N,M≤100。
程式碼
#include <bits/stdc++.h> using namespace std; int n, m, a[101][101], dp[101][101]; int main() { scanf("%d %d", &n, &m); for (register int i = 1; i <= n; i++) { for (register int j = 1; j <= m; j ++) { scanf("%d", &a[i][j]); } } memset(dp, 0, sizeof(dp)); dp[1][1] = 0; for (register int i = 1; i <= n;i++) { for (register int j = 2; j <= m; j++){ dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + a[i][j]; } } cout << dp[n][m] << endl; return 0; }