分发方式的数量

时间:2011-10-22 02:10:19

标签: algorithm math

如果我们有不同的东西,我们需要在不同的人之间分配它们,那么我们可以采用多少种方式来实现这一目标,以便每个人都有以下条件: 1号人物至少可以拥有物品,最多可以拥有物品 人2至少可以拥有c物和最多物 ..等等?

e.g if n = 5 and m =3 and the conditions are:
person 1 can receive at least 0 and at most 1 gift
person 2 can receive at least 1 and at most 3 gift
person 3 can receive at least 1 and at most 4 gift
then the number of ways of distributing  these 5 gifts is 6((0 1 4), (0 2 3), (0 3 2), (1 1 3), (1 2 2), (1 3 1)).

我认为,一种方法是迭代每个范围的所有可能组合,并查看哪些总和为n,但不能想到有效的算法。 感谢

1 个答案:

答案 0 :(得分:3)

您可能希望使用生成函数方法。表示人i获得x指数的对象数量。这意味着,如果某个人i至少可以拥有3和最多7件事,则这与

一词相对应
x^3 + x^4 + x^5 + x^6 + x^7

请记住将+视为OR,将*视为AND。如果我们想强加条件和人1以及人2,那么将它们的功能相乘。例如,人1介于37之间,并说人2至少有5件事,并添加第三人大多数10件事。然后我们得到:

(x^3 + x^4 + x^5 + x^6 + x^7) * (x^5 + x^6 + ... ) * (1 + x + x^2 + ... + x^10)

也可以写成

(x^3 + x^4 + x^5 + x^6 + x^7) * ( x^5/(1+x) ) * (1 + x + x^2 + ... + x^10)

从中获取信息的方法如下。这些术语扩展中x^M的系数给出了在受到给定约束的所有人中分配总共M个事物的方法的数量。

你可以从公式中解决这个问题,或编写一个程序来提取系数,但我们的想法是使用生成函数作为一种方便有效的方法来编码约束和答案。