首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从n个存储桶中选择项目的最小成本

从n个存储桶中选择项目的最小成本
EN

Stack Overflow用户
提问于 2016-11-13 13:05:41
回答 1查看 147关注 0票数 2

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2016-11-13 15:33:31

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

代码语言:javascript
复制
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}

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

代码语言:javascript
复制
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
             }

初始状态可以通过赋值

代码语言:javascript
复制
C[1,1] = I[1,1],
C[1,2] = I[1,2],
C[1,3] = I[1,3]

在迭代填充状态空间后,可以通过计算下面的表达式来找到期望值。

代码语言:javascript
复制
min { C[n,1], C[n,2], C[n,3] }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40570779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档