算法导论 动态规划

 

FASTEST-WAY(a, t, e, x, n)

 1  f1[1] ← e1 + a1,1

 2  f2[1] ←e2 + a2,1

 3  for j ← 2 to n

 4       do if f1[j - 1] + a1,jf2[j - 1] + t2,j-1 + a1,j  如果想把当前任务在line1解决,则要看前一节点是在line1上还是line2上,计算二者的花费,取较小者

 5             then f1[j] ← f1[j - 1] + a1, j

 6                  l1[j] ← 1

 7             else f1[j] ← f2[j - 1] + t2,j-1 + a1,j

 8                  l1[j] ← 2

 9          if f2[j - 1] + a2,jf1[j - 1] + t1,j-1 + a2,j  如果在line2解决,与line1情况同理。

10             then f2[j] ← f2[j - 1] + a2,j       

11                  l2[j] ← 2

12             else f2[j] ∞ f1[j - 1] + t1,j-1 + a2,j

13                  l2[j] ← 1

14  if f1[n] + x1f2[n] + x2

15      then f* = f1[n] + x1

16          l* = 1

17      else f* = f2[n] + x2

18             l* = 2

 

首先说明一下f1,f2,l1,l2数组的作用。f1[i]中存储的是从起点到line1上的第i个节点的最短距离。同样,f2[i]中存储的是从起点到line2上的第i个节点的最短距离。每次循环进行两对数据的共两次比较。最后根据数组l[i],由后向前,确定最佳路线,或者叫做最佳选择。

后面的几节没细看,暂时不总结了。

 

posted @ 2011-03-07 17:18  SunnyDay2015  阅读(260)  评论(0编辑  收藏  举报