当您有许多可以组合到同一包装中的物品(每个物品都有重量和价格)时,我正在尝试确定最低的运输成本。约束如下:
这些物品可以组合成的包装数量没有限制,只要它们保持在总价格阈值以下即可。
我看过背包问题,但是背包问题和我的问题有2个主要区别:
答案 0 :(得分:1)
如果物品很少,可以使用二进制掩码通过蛮力解决。将Monthly
定义为项目数。当值n
(m
)表示长度等于0 <= m < 2^n
的二进制掩码时(如果需要,前导零)。掩码显示已处理的项目(如果n
个项目已处理,则掩码中的i
位为1
)。为掩码i
中的子集项定义F[m]
的最低成本。当m
代表F[m] = min(F[m xor x] + cost(x))
的所有值x
(x是m的子集)时。 m and x = x
和xor
是二进制操作。 and
的价格为1包,其中包含来自掩码cost(x)
的物品(以下是from语句中的2.)。该算法的复杂度为x
(对于n <=〜14,在一台好的计算机上不到一秒钟)。但是您可以使用此https://cp-algorithms.com/algebra/all-submasks.html并获得复杂性O(4^n)
(对于n <=〜18来说,是很好的工作)。最初的O(3^n)
和答案是F[0] = 0
。