d378: 最小路徑

出處 http://zerojudge.tw/ShowProblem?problemid=d378

內容 :

現在有一張地圖,凡是走過某一個格子,都會消耗體力,所以請你找出最少消耗體力值。

現在老鼠在地圖的左上角,在走的時候時,所以只能往右或下走,之後要走到右下角,

走過的點上的數字必須加總,請輸出加總的數字最小的。

測資一 :

0 7 8 9

1 5 1 1

2 4 10 0

可以走 0 → 7 → 8 → 9 → 1 → 0 SUM = 7 + 8 +9 + 1 = 25

0 → 1 → 5 → 1 → 1 → 0 SUM = 1 + 5 + 1 + 1 =8

0 → 7 → 8 → 1 → 10 → 0 SUM = 7 + 8 + 1 + 10 = 26

.

.

以此類推,只輸出最小值 8

" 左上角跟右下角必為 0 "

輸入說明 :

輸入的每第一行會有兩個數字 N, M ( 2 ≦ N , M ≦ 101)

之後會有 N 行,每行上會有 M 個數字 G ( 1 ≦ G ≦ 20 )

輸出說明 :

對每組地圖先輸出 "Case #%d :"

輸出從左上走到右下最少的體力消耗

範例輸入 :

3 4

0 7 8 9

1 5 1 1

2 4 10 0

2 2

0 1

1 0

範例輸出 :

Case #1 :

8

Case #2 :

1

提示 :

DP

出處 :

DP (管理:morris1028)

解題策略

使用DP,因為(i,j)只能來自於(i-1,j)與(i,j-1)較小的值,加上原本的值

dp[i][j]=min(dp[i-1][j],dp[i][j-1])+map[i][j];