我正在寻找解决以下问题的方法,但我无法合理地制定它,然后找到合适的算法来解决它。
考虑放在购物袋中的物品清单:1、2、3、4...
每个项目都可以是一个或多个促销活动的一部分:A、B、C、D
我们希望应用这组促销活动,以使折扣价值最大化,不允许任何项目参与多个促销活动,但每个促销活动可以应用多次。
促销可以通过多种方式定义,但现在我只考虑“购买 2 件符合条件的物品,节省 X”的类型,我希望我能从这里进行概括。
我的例子是:
- 促销 A - 买 2 减 8
- 促销 B - 买 2 送 10
促销 C - 买 2 减 6
第 1 项 - 符合 A、B 条件
- 第 2 项 - 符合 B 条件
- 第 3 项 - 符合 A、C 条件
- 第 4 项 - 符合 B、C 条件
在这里很容易看出,促销的正确应用是 A 到项目 1、3 和 B 到 2、4。这给出了 18 的总折扣。
在更大的情况下,它变得很困难,因此需要通过算法求解。
我尝试了以下方法:
- 列出我们可以应用的所有可能的促销组合。
- 丢弃任何明显较差的内容(例如具有更高价值的促销的直接副本)。
- 应用任何与其他促销没有重叠的项目(例如,如果第 1 项和第 2 项仅对促销 A 有效,则应用该促销)。
- 取剩余的集合并尝试对结果进行分支定界类型搜索。
但是,这可能需要很长时间(对于具有类似折扣的大型套装)。
我觉得这是一种背包或作业问题,但我写不出来。如果无法明智地编写它,我将无法解决它。
这是一个公认的问题变体吗?任何攻击它的帮助将不胜感激,尤其是使用伪代码来帮助解决它