动态规划问题,找到对商店的最佳访问

时间:2019-09-19 13:28:25

标签: algorithm dynamic-programming

假设我们有一个商店列表,其中包含一些在访问时有价值的信息。 例如。 store_value = [2,4,9,1,4,2]。

从一家商店跑到另一家来收集价值需要一定的成本,例如run_cost = [0,1,2,3,1,2]。 就是说,如果我试图在商店i = 3(而不是0索引)处收集值9,它将具有成本2,这意味着由于所需的成本,我将无法访问之前的2家商店。考虑一下在运行存储i之前已休息的金额。

现在使用动态编程,我们可以说V(x,i),其中V(0,i)是第一个i存储之后可获得的最大值(如果我们不打算存储i)。如果我们确实要存储i,则V(1,i)是第一个i存储之后可获得的最大值。

从商店i = 1..6运行的P(0,i)和P(1,i)会是什么样?

我尝试运行该算法,但是有什么告诉我我做错了。 从我可以搜集到的东西:

P(0,1)= 0,P(1,1)= 2

从这里开始,这是我认为错误的地方: P(0,2)= 2,P(1,2)= 4 ...等等

如果有人可以帮助我理解我应该如何考虑这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

更简单的表述是将V(i)定义为商店1..i可以达到的最大值。然后,递归定义为:

V(i) = max(
           V(i - 1),                                //do not visit store i
           store_value[i] + V(i - run_cost[i] - 1)  //visit store i
       )

run_cost0时需要格外小心。