最低通行費

2021-07-30 19:53:57 字數 1147 閱讀 3859

描述

乙個商人穿過乙個 n*n 的正方形的網格,去參加乙個非常重要的商務活動。他要從網格的左上角進,右下角出。每穿越中間1個小方格,都要花費1個單位時間。商人必須在(2n-1)個單位時間穿越出去。而在經過中間的每個小方格時,都需要繳納一定的費用。

這個商人期望在規定時間內用最少費用穿越出去。請問至少需要多少費用?

注意:不能對角穿越各個小方格(即,只能向上下左右四個方向移動且不能離開網格)。

輸入第一行是乙個整數,表示正方形的寬度n (1 <= n < 100);

後面 n 行,每行 n 個不大於 100 的整數,為網格上每個小方格的費用。

輸出至少需要的費用。

樣例輸入

5

1 4 6 8 10

2 5 7 15 17

6 8 9 18 20

10 11 12 19 21

20 23 25 29 33

樣例輸出

109

提示 樣例中,最小值為109=1+2+5+7+9+12+19+21+33。

相當於有乙個正方形,各個點有乙個數值,現在求從左上角到右下角使數值的和最小。

到達b[i][j]的數值和只與b[i-1][j]和b[i][j-1]有關,取二者之間小的再加上該點的數值a[i][j]就是所求的最小和。

b[i][j]=min(b[i-1][j],b[i][j-1])+a[i][j];

需要先做乙個處理,把每乙個行每一列的數值和算出,存進b[i][j]中。

這樣問題就解決了。 

#include

using

namespace std;

intmin

(int a,

int b)

intmain();

cin>>n;

for(i=

1;i<=n;i++)

for(j=

1;j<=n;j++)

cin>>a[i][j];

for(i=

1;i<=n;i++)

for(i=

2;i<=n;i++)

for(j=

2;j<=n;j++)

cout

}

7614 最低通行費

總時間限制 1000ms 記憶體限制 65536kb 描述 乙個商人穿過乙個 n n 的正方形的網格,去參加乙個非常重要的商務活動。他要從網格的左上角進,右下角出。每穿越中間1個小方格,都要花費1個單位時間。商人必須在 2n 1 個單位時間穿越出去。而在經過中間的每個小方格時,都需要繳納一定的費用。...

OJ最低通行費

5 最低通行費 描述乙個商人穿過乙個 n n 的正方形的網格,去參加乙個非常重要的商務活動。他要從網格的左上角進,右下角出。每穿越中間1個小方格,都要花費1個單位時間。商人必須在 2n 1 個單位時間穿越出去。而在經過中間的每個小方格時,都需要繳納一定的費用。這個商人期望在規定時間內用最少費用穿越出...

1287 最低通行費

乙個商人穿過乙個n n的正方形的網格,去參加乙個非常重要的商務活動。他要從網格的左上角進,右下角出。每穿越中間1個小方格,都要花費1個單位時間。商人必須在 2n 1 個單位時間穿越出去。而在經過中間的每個小方格時,都需要繳納一定的費用。這個商人期望在規定時間內用最少費用穿越出去。請問至少需要多少費用...