OJ最低通行費

2021-09-26 10:36:05 字數 1129 閱讀 7378

5:最低通行費

描述乙個商人穿過乙個 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。

下面分析一波:

首先審題,商人必須在2n-1步之內到達,說明不能上下亂拐,只能夠向右或者向下走,

那麼問題就簡單一點了,我們需要把每一格的最小費用算出來,最後到出口算的也是最小費用,到達

每一格的最小費用為(它當格的費用加上min(左面格仔費用,上面格仔費用),因為左面格仔和上面格仔也是先前算過的最小費用,所以現在還是最小費用,具體**如下。需要用兩個陣列來操作,

乙個用於輸入(a),另乙個用於存最後每個格仔的最少費用(big),big需要初始化乙個大數,因為需要初始化左邊邊界和上邊邊界時,需要找左、上的最小值。(tips:memset最好別亂用,最好只用來賦值大數或者0,否則就會負的好多)。

#includeusing namespace std;

int arr2[102][102];

int main()

} for(int i=1;i<=n;i++)

} for(int i=1;i<=n;i++)else

} }cout<}

最低通行費

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

7614 最低通行費

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

1287 最低通行費

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