我正在尝试为这个问题提出一个合理的算法:
假设你有一堆球。每个球至少有一种颜色,但也可以是多色的。每个球上也有一个数字。还有一堆盒子,每个盒子只有一种颜色。目标是最大化盒子中球上的数字总和,唯一的规则是:
- 为了将球放入盒子中,它必须至少具有盒子的颜色
- 你只能在每个盒子里放一个球。
例如,您可以将蓝色和绿色的球放入蓝色盒子或绿色盒子,但不能放入红色盒子。
我提出了一些在运行时间方面有很大帮助的优化。例如,您可以按点值的降序对球进行排序。然后当你从最高数字到最低数字时,如果球只有一种颜色,并且没有其他包含该颜色的更高点球,你可以把它放在那个盒子里(然后把那个盒子和那个球从其余组合)。
我只是好奇这种类型的问题是否有某种动态算法,或者只是变相的旅行推销员问题。如果我知道最多有 X 种颜色会有帮助吗?任何帮助是极大的赞赏。谢谢!
编辑 - 这是一个简单的例子:
球:
- 1 个红球 - 5 分
- 1 个蓝球 - 3 分
- 1 个绿球/红球 - 2 分
- 1 个绿/蓝球 - 4 分
- 1 个红/蓝球 - 1 分
盒子:
- 1红色
- 1 蓝色
- 1 绿色
最佳解决方案:
- 红盒子里的红球
- 蓝色盒子里的蓝色球
绿盒中的绿/蓝球
总分:12分(5+3+4)