我正在尝试设计一个合理的算法来解决这个问题:
假设您有一堆球。每个球至少有一种颜色,但也可以是多彩的。每个球都有一个重量和一个与之关联的价值。还有一堆盒子,它们各自只有一种颜色。每个盒子都有一个最大的装载球数。目标是在保持总重量不超过W的情况下最大化盒子中的总价值,唯一的规则是:
为了将一颗球放入盒子中,它必须至少具有盒子的颜色。
(例如,您可以将蓝色和绿色的球放入蓝色或绿色的盒子中,但不能放入红色的盒子中。)
我已经进行了一些研究,发现这似乎类似于背包问题,也类似于可以通过匈牙利算法解决,但我似乎无法将其简化为任何一个问题。
我只是好奇是否存在某种动态规划算法,使得这种类型的问题可以在多项式时间内得到解决,或者它只是旅行推销员问题的伪装。如果我知道最多有X种颜色,是否有帮助?非常感谢任何帮助。如果需要,我还可以使用变量名来规范化问题。谢谢!
这里是一个简单的例子:
最大重量:5
球:
1个红球 - (价值= 5,重量= 1)
1个蓝色球 - (价值= 3,重量= 1)
1个绿色/红色/蓝色球 - (价值= 2,重量= 4)
1个绿色/蓝色球 - (价值= 4,重量= 1)
1个红色/蓝色球 - (价值= 1,重量= 1)
盒子:
1个红色(容纳1个球)
1个蓝色(可容纳2个球)
1个绿色(容纳1个球)
最佳解决方案:
将红球放入红盒中
蓝盒中的蓝球和红/蓝球
绿盒中的绿/蓝球
总价值:13(5 + 3 + 1 + 4)
总重量:4(1 + 1 + 1 + 1)
注:尽管绿/红/蓝球比红/蓝球更有价值,但它的重量会使我们超过限制。
编辑:
一个澄清的点:具有相同颜色组合的球不一定具有相同的重量和价值。例如,你可以有一个价值为3、重量为1的红球,和一个价值为2、重量为5的红球。
编辑2:
如果这样做有助于我们提出动态编程算法,那么我们可以假设整数权重和价值。