具有不同限制的组合

Combinatoric with different limits

我正在寻找解决以下问题的算法:

我们有 N 个对象要分布在 C 个容器上,而每个容器 C 都有不同的体积 V。现在我们正在寻找可能的组合来将对象 N 分布在容器 C 上,其中 N 必须最后为零。但是每个容器可以包含 0 到 V 个对象 N,具体取决于它的体积。

解决这个问题的一个简单方法是使用动态规划:令 f(i, j) 为将前 i 个项目放入前 j 个容器的方法数。设 V_j 为第 j 个容器的体积。

然后我们有复发

f(0, 0) = 1
f(i, j) = SUM(k = 0 to min(V_j, i), f(i - k, j - 1))

其中 k 是我们放置在第 j 个容器中的对象数量。

这假设对象是不可区分的。如果是,您可能希望将结果乘以 N!。