我正在考虑解决this other question about counting the number of values whose digits sum to a target的方法,并决定尝试范围为[0,n ^ base]的情况。所以基本上你可以得到N个独立的数字,这是一个更简单的问题。
N个自然数可以总和到目标T的方式的数量很容易计算。如果你认为把它放在T-stick中的N-1分频器,你会看到答案是(T + N-1)!/(T!(N-1)!)。
但是,我们的N个自然数被限制为[0,base],因此可能性会减少。我想为这个案例找到一个简单的公式。
我考虑的第一件事就是扣除了用“大棒”取代棒的“基数”的可能性。不幸的是,有些可能性被重复计算,因为它们有多个位置可以插入“大棒”。
有什么想法吗?
答案 0 :(得分:2)
您可以使用生成功能。
假设订单很重要,那么您正在寻找
中x^T
的系数
(1 + x + x^2 + ... + x^b)(1 + x + x^2 + .. + x^b) ... n times
= (x^(b+1) - 1)^n/(x-1)^n
使用二项式定理(甚至适用于-n),您应该能够将答案写为二项式系数乘积的总和。
设b + 1 = B.
使用二项式定理我们有
(x^(b+1) - 1)^n = Sum_{r=0}^{n} (-1)^(n-r)* (n choose r) x^(Br)
1/(x-1)^n = Sum (n+s-1 choose s) x^s
所以我们需要的答案是:
Sum (-1)^(n-r) * (n choose r)*(n+s-1 choose s)
对于符合
条件的任何r和sBr + s = T.