代码之家  ›  专栏  ›  技术社区  ›  Craig Gidney Mihai

计算两个值的排列数,对运行有限制

  •  0
  • Craig Gidney Mihai  · 技术社区  · 15 年前

    我在想解决问题的方法 this other question about counting the number of values whose digits sum to a target

    N个自然数和一个目标T的方法数很容易计算。如果你认为它是把N-1分隔符放在T杆之间,你应该看到答案是(T+N-1)!/(T!(N-1)!)。

    我考虑的第一件事是推断出用“大棒”代替“基棒”的可能性的数量。不幸的是,有些可能性被重复计算,因为它们有多个地方可以插入一根“大棒”。

    有什么想法吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Aryabhatta Aryabhatta    15 年前

    假设顺序很重要,那么你要寻找 x^T 在里面

    (1 + x + x^2 + ... + x^b)(1 + x + x^2 + .. + x^b) ... n times
    
     = (x^(b+1) - 1)^n/(x-1)^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)
    

    Br + s = T.