Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 从n个桶中选择项目的最低成本_Algorithm_Data Structures_Dynamic Programming - Fatal编程技术网

Algorithm 从n个桶中选择项目的最低成本

Algorithm 从n个桶中选择项目的最低成本,algorithm,data-structures,dynamic-programming,Algorithm,Data Structures,Dynamic Programming,我有n个桶。每个存储桶包含3个项目-例如I1、I2和I3。每个项目都有各自的关联成本。您必须从每个桶中拾取项目,以便从两个连续桶中拾取的项目不相同。从n个这样的桶中挑选n件物品的最小成本的算法是什么 我认为只有递归蛮力解决方案才能探索所有成本并找出最小成本 解决这个问题的有效算法是什么?动态规划的状态空间可以定义如下 C[i,j] = minimum cost attainable by choosing items an item from each bucket in {1

我有n个桶。每个存储桶包含3个项目-例如I1、I2和I3。每个项目都有各自的关联成本。您必须从每个桶中拾取项目,以便从两个连续桶中拾取的项目不相同。从n个这样的桶中挑选n件物品的最小成本的算法是什么

我认为只有递归蛮力解决方案才能探索所有成本并找出最小成本


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

动态规划的状态空间可以定义如下

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]
对于
{1,…,n}
中的每个
j
,以及
{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] }