当前位置: 首页 > 知识库问答 >
问题:

背包算法变异

狄海
2023-03-14

我有以下问题:

有一组项目,每个项目有两个不同的正值a和B。

背包有两个值:totalA和totalB。这是所选项目值A和B的最大和。

我必须找出背包能装的最大物品数是多少。

示例:

输入:

总计A:10,总计B:15

项目1 A:3,B:4

项目2 A: 7,B: 2

项目4 A:2,B:1

项目5 A:4,B:6

输出:

3(项目:2、3、4)

如何使用动态规划来解决此任务?

共有3个答案

太叔正文
2023-03-14

下面是一个可以帮助您的递归方程:-

if(Items[N].b<=Wa && Items[N].b<=Wa)
    Value(N,Wa,Wb) = max(1+Value(N-1,Wa-Items[N].a,Wb-Items[N].b),Value(N-1,Wa,Wb)) 

else Value(N,Wa,Wb) = Value(N-1,Wa,Wb)

Where Wa = Current capacity of A sack & Wb of B sack
      N = no of items considered

注意:您可以在递归解决方案上使用哈希表实现,这将阻止三维数组。

翁鸿远
2023-03-14

定义m[i, wa, wb]为最大值(此处的项目计数),可以通过as的总和小于或等于wabs的总和小于或等于wb,使用高达i的项目。

m[i,wa,wb] = m[i-1,wa,wb]

如果<代码>项[i]. a

m[i,wa,wb] =  max (m[i-1, wb, wb], m[i-1, wa - item[i].a, wb - item[i].b] + 1)

如果<代码>项[i]. a

夏侯衡
2023-03-14

这被称为“乘法约束背包问题”(MKP,偶尔渲染为d-KP)。它可以像常规背包问题一样在伪多项式时间内求解,但您需要一个二维表而不是一个。

 类似资料:
  • 任务是典型的背包问题。求解时应采用贪婪算法。我设法创建了下面的代码,但它工作得太慢了。你能告诉我怎么加快速度吗?谢谢你。 c是背包的重量限制。n表示价格权重对的数量(这两个数字都是int类型,而不是float)。限制如下:(1)如果在相同重量的元素之间选择,价格最高的元素应该被取;(2)如果在相同价格和相同重量的元素之间选择,第一个输入的元素应该被取。

  • 我对这个问题有点困惑。作为算法帮助我找到最大的利润从袋。但是这个算法并没有告诉我我应该拿哪一个项目会让我的利润最大。例如 n=4项,背包的容量M=8,利润=[15,10,9,5],重量分别为w=[1,5,3,4],当我解决这个问题时,我得到最大的利润为29 这里是解决方案[http://www.mafy.lut.fi/study/DiscreteOpt/DYNKNAP.pdf] 但是我想知道我应该

  • 我一直在研究递归,并试图解决背包问题[https://en.wikipedia.org/wiki/Knapsack_problem]。我想出了下面的算法,它工作得很好: 这里奇怪的是,只有当调用初始函数的重量为,并且时,才会出现这种行为。 谢谢, D_Darric

  • 我有一个项目清单,每个项目都有一个价格--或者就背包问题而言,一个重量。可购买物品的数量只受预算的限制,所以只要总花费不超过某个常数,就有可能购买尽可能多的物品。我也有一个算法,它基于某些变量,告诉每一个项目的利润(即每一个项目的价值)。所以基本上,我有一个有界背包问题,额外的条件是每个物品中有一个以上适合背包。 我想在这些条件下使利润最大化。我知道没有一个有效的解决方案,但至少有一个可行的方案吗

  • 我试图用Python 3.x中的贪婪算法解决背包问题。下面是我的代码,以及我用来测试它的示例案例。每个示例案例的形式为行[0]=最大权重,行[1:]的形式为(权重,值。) 成功案例1: 上一次我在重写程序之前出现这样的错误,是在与int类型进行斗争。这一次似乎是在断绝关系,但我不确定如何修复它。非常感谢任何帮助。我只知道当我看到它的时候这会是一个简单的解决方案... 编辑:这必须与我的列表如何排序

  • 此处所选项目应为项目1、项目4、项目5和项目6(60+60+80+40=240公斤) 实施例2:-袋最多可容纳180公斤的重量 项目1-60公斤、项目2-30公斤、项目3-55公斤、项目4-30公斤、项目5-70公斤、项目6-48公斤