描述
乙個商人穿過乙個 n*n 的正方形的網格,去參加乙個非常重要的商務活動。他要從網格的左上角進,右下角出。每穿越中間1個小方格,都要花費1個單位時間。商人必須在(2n-1)個單位時間穿越出去。而在經過中間的每個小方格時,都需要繳納一定的費用。
這個商人期望在規定時間內用最少費用穿越出去。請問至少需要多少費用?
注意:不能對角穿越各個小方格(即,只能向上下左右四個方向移動且不能離開網格)。
輸入第一行是乙個整數,表示正方形的寬度n (1 <= n < 100);
後面 n 行,每行 n 個不大於 100 的整數,為網格上每個小方格的費用。
輸出至少需要的費用。
樣例輸入
51 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 個單位時間穿越出去。而在經過中間的每個小方格時,都需要繳納一定的費用。這個商人期望在規定時間內用最少費用穿越出去。請問至少需要多少費用...