1. 程式人生 > 其它 >第二次上機實驗

第二次上機實驗

一、問題描述

7-3 最低通行費 (25 分)

一個商人穿過一個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。一、問題描述

二.演算法描述

注意題目條件:1、商人必須在(2N-1)個單位時間穿越出去。2、不能對角穿越各個小方格(即,只能向上下左右四個方向移動且不能離開網格)。分析可知,商人只能往右或者往下移動。建立一個二維陣列m[i][j],記錄從上一個位置到該位置的最小花費,那麼最後m[n][n]的值就是答案。

三.問題求解

1)根據最優子結構性質,列出遞迴方程式

m[i][j] = a[i][j] + min(m[i-1][j] , m[i][j-1])  (i > 1,j > 1)

m[i][j] = a[i][j] + m[i-1][j]  (j = 1)

m[i][j] = a[i][j] + m[i][j-1]  (i = 1)

2)給出填表法中表的維度、填表範圍和填表順序

表的維度:二維

填表的範圍:1<=i<=n , 1<=j<=n

填表順序:自上而下,自左向右。

3)分析該演算法的時間和空間複雜度

因為是二重迴圈所以時間複雜度是O(n^2)

因為開闢了一個二維陣列m[i][j]所以空間複雜度是O(n^2)

四.心得體會

動態規劃真的太難頂了,感覺學不太會,作業也不太會做,但是還是希望努力學會,希望在老師的帶領下,可以更好的學會演算法。