我要開始輔導,所以我決定從算法類中處理一些舊問題。問題如下:您正在銷售報紙,並且每天都在一個路口開始路線,並結束您的路線=您開始的東北部。城市街道在網格上,如下圖所示,你從(0,0)開始到(n,m)結束。 向北移動將您從(x,y)移至(x,y +1)。東移讓你從(x,y)到(x + 1,y)。 在每個路口(x,y),您停下來銷售報紙,並且收入r(x,y)的收入 。設OPT(n,m)表示從(0,0)到(n,m)的最佳步行總收入。需要幫助編寫一般情況下的僞代碼
我使用自下而上動態編程針對此問題的僞代碼如下所示:
Bottom-Up-Alg(n,m,s[][]) \\ n and m are coordinates and s holds the revenue at each coordinate (n,m)
opt = 0 \\ holds optimal revenue
opt += s[0][0] \\value at (0,0)
i = 0
j = 0
while (i <= n and j <= m)
if (s[i+1][j] > s[i][j+1])
opt += s[i+1][j] \\ Move east
i++
else
opt += s[i][j+1] \\ Move north
j++
return r
嚴格地說該算法的運行時間將是O(N + M)。但是,如果n和m成比例,則運行時間可以被認爲是O(n)或O(m)。
問題是,我發現我的算法是貪婪的,它不會適用於所有情況。我在編寫僞代碼時會遇到麻煩,這一般會起作用。幫助將不勝感激。如果你能給我任何你想出的解決方案的運行時間,那也是很好的。
我很尷尬,我沒有認識到這是作業。抱歉。 – 2014-11-06 13:43:55