假设我们有一个商店列表,其中包含一些在访问时有价值的信息。 例如。 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 ...等等
如果有人可以帮助我理解我应该如何考虑这个问题,我将不胜感激。
答案 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_cost
为0
时需要格外小心。