第二次上機實驗
一、問題描述
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)
四.心得體會
動態規劃真的太難頂了,感覺學不太會,作業也不太會做,但是還是希望努力學會,希望在老師的帶領下,可以更好的學會演算法。