给定n个相同的球和m个唯一的箱子,每个箱子都有一定的容量(从0到z,其中z是小于等于15的非负整数),有多少种不同的分配球的方法?有没有一个通用的算法来解决这类问题?
我遇到了"星星和酒吧";和"包容/exclusion"原则,但我也发现了一些问题/答案在这里stackoverflow,但没有一个答案似乎足够普遍,可以扩展到任意大小的n。似乎解决它的一种方法是动态规划。对于任意n,如何做到这一点(下面的解决方案的问题是,对于相对较小的n,例如n = 1000, Python中的递归深度变得太大)。
排序和不排序组合将k个球分配到n个不同容量的箱子中
我理解错了吗?谁能像给五岁小孩解释一样给我解释一下吗?
这个问题可以通过生成函数来建模,其中每个bin产生一个多项式(1 + z + z2+…+ zc),其中c是bin的容量,我们取bin多项式的乘积并提取zn的系数。
直接的非递归动态规划算法是从左到右求乘积。如果需要的话,你可以把你的乘法算法混搭起来,特别是在c≤15的情况下。