【发布时间】:2022-09-27 17:27:36
【问题描述】:
我正在尝试为自己制作一个小脚本或一些可以帮助我找到达到目标值集所需的最少组合数量的东西。但是我很难找到一种方法来做到这一点,因为我只能找到类似的问题,但只有一个总和,而不是一组数字。
考虑这张表:
| X | Y | Z
A | 4 4
B | 5 5
C | 4 4
D | 3 3 3
A、B、C、D 是不同的集合,产生不同数量的 X、Y、Z。
现在假设我们的目标是 40X、80Y、60Z。
通过手动试错,我能找到的最低组合是 21 个,并且有多种变体可以达到这个目标。
例如: 0A、9B、7C、5D = 43X、88Y、60Z 但是也 1A、8B、6C、6D = 46X、82Y、62Z
两者都是有效的,因为它们都使用了 21 种组合并达到了目标值。 有些稍微超过了,但没关系,重要的部分是最少的组数,而不低于任何目标值。
我的问题:我将如何确定 21 是否是可能的最低值,如果不是,那么会给出更低数量的组合是什么?
-
动态规划?
-
这是一个非常经典的linear programming 问题。您想在约束
qA * 4 + qC * 4 + qD * 3 >= 40下最小化qA + qB + qC + qD;qB * 5 + qC * 4 + qD * 3 >= 80;qA * 4 + qB * 5 + qD * 3 >= 60和qA >= 0, qB >= 0, qC >= 0, qD >= 0。
标签: python math calculation