勾长公式()

正解是 dp,但是可以用勾长公式做,很有意思。

链接

import math
while True:
    n = int(input())
    if n == 0:
        break
    k = list(map(int, input().split()))
    ans = math.factorial(sum(k))
    for i in range(0, n):
        for j in range(0, k[i]):
            cur = 1
            cur = cur + k[i] - 1 - j
            for s in range(i + 1, n):
                if k[s] > j:
                    cur = cur + 1
            ans = ans // cur
    print(ans)
————————

正解是 dp,但是可以用勾长公式做,很有意思。

链接

import math
while True:
    n = int(input())
    if n == 0:
        break
    k = list(map(int, input().split()))
    ans = math.factorial(sum(k))
    for i in range(0, n):
        for j in range(0, k[i]):
            cur = 1
            cur = cur + k[i] - 1 - j
            for s in range(i + 1, n):
                if k[s] > j:
                    cur = cur + 1
            ans = ans // cur
    print(ans)