algorithm - 这个问题对应于哪个背包问题变体?

标签 algorithm math optimization dynamic-programming knapsack-problem

让我们想象一下,我必须在限制条件下用元素装满我的背包:

  • 每个项目都有一个关联的权重 wi 和利润 pi
  • 最大总重量Wmax

知道:

  • 有项目类别,我必须从每个类别中选择恰好一个项目
  • 当然,选择项目的目的是最大化利润的总和

例子:Wmax=400

<表类="s-表"> <头> 书籍 书本重量 图书利润 食物 食物重量 食品利润 <正文> 圣经 500 25 奶酪 80 120 小王子 150 5 香蕉 250 200

这里,最好的解决方案是(小王子,香蕉)

我有一个类似的问题,我想找到最好的编码方式,但我不知道这是什么版本/变体,它是已知变体吗?

最佳答案

我不确定是否存在与您的匹配的现有变体,但很容易从经典变体中得出推论并解决这个问题。

经典变体具有 2D 动态规划(DP[N][W],其中 NW 是项目数和最大重量).

在这个变体中,由于我们只能从每个类别中选择一个,您可以使用像 dp[i][w][j] 这样的 3D DP,它表示您可以从中获得的最大值权重为 wj 的第一个 i 项是一个 0/​​1 整数,表示是否来自类别编号 j 是否被选中。

我将离开实现,因为递归关系相对简单并且与经典变体非常相似。

关于algorithm - 这个问题对应于哪个背包问题变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71539662/

相关文章:

java - 如何打印这个图案?

algorithm - Find Missing row in n*2^n matrix in 2^n time 算法题

arrays - 编程珍珠: finding sub-array with max sum

java - 在 OSX 上的 Java 中从大的 long 转换为 float 时出现错误?

c++ - 使用物理定律模拟轨道

mysql - 为什么我的列在 Django Admin 中排序很慢,只有 1 个问题表

python - 数组中的显着反转

c - 如何优化 C 中围绕零对称的整数区间的范围检查?

algorithm - 帮助算法将房间放置在有限的空间内

performance - 网站优化/减少asp.net mvc 3中的加载时间