从n桶中选择物品的最低成本

时间:2016-11-13 05:05:41

标签: algorithm data-structures dynamic-programming

我有n个桶。每个桶包含3个项目 - 比如I1,I2和& I3。每个项目都有自己的相关成本。您必须从每个桶中挑选物品,以便从2个连续桶中挑选的物品不相同。什么算法可以找到从n个这样的桶中挑选n个项目的最低成本?

我只能想到递归蛮力解决方案,它将探索所有成本并找出它们的最小成本。

什么是解决问题的有效算法?

1 个答案:

答案 0 :(得分:1)

动态编程的状态空间可以定义如下。

C[i,j] = minimum cost attainable by choosing items an item from each
         bucket in {1,...,i} where each item index is different from
         the item index in the previous bucket and the item in the
         last bucket is j where i in {1,...,n} and j in {1,2,3}

对于此状态空间,我们获得以下递归关系,I[j,k]中的j{1,...,n}中的k表示{1,2,3}的成本存储桶k中的k项。

C[i,j] = min { min { C[i-1,2], C[i-1,3] } + I[i,1]: j = 1,
               min { C[i-1,1], C[i-1,3] } + I[i,2]: j = 2,
               min { C[i-1,1], C[i-1,2] } + I[i,3]: j = 3
             }

可以通过分配

来填充初始状态
C[1,1] = I[1,1],
C[1,2] = I[1,2],
C[1,3] = I[1,3]

并且在迭代填充状态空间之后,可以通过评估下面的表达式找到所需的值。

min { C[n,1], C[n,2], C[n,3] }