我要开始辅导,所以我决定从算法类中处理一些旧问题。问题如下:您正在销售报纸,并且每天都在一个路口开始路线,并结束您的路线=您开始的东北部。城市街道在网格上,如下图所示,你从(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