只剩三天了,只能弄些简单的知识。一想到300元我就心痛。
文章目录
排列数的计算
A n k = n ! ( n − k ) ! = n ( n − 1 ) ⋯ ( n − k + 1 ) A_n^k=\frac{n!}{(n-k)!} = n (n - 1)\cdots (n - k + 1) Ank=(n−k)!n!=n(n−1)⋯(n−k+1)
k = 3
n = 5
ans = 1
for i in range(n, n - k, -1):
ans *= i
print(ans)
组合数的计算
C n k = n ! k ! ( n − k ) ! C_n^k = \frac{n!}{k!(n-k)!} Cnk=k!(n−k)!n!
1. 直接计算
n = 50
k = 20
temp = 1
for i in range(1, n + 1):
temp *= i
for i in range(1, k + 1):
temp //= i
for i in range(1, n - k + 1):
temp //= i
print(temp)
缺点:数太大,不好算
2. 递推计算
C n k = C n − 1 k − 1 + C n − 1 k C_n^k = C_{n-1}^{k-1}+C_{n-1}^k Cnk=Cn−1k−1+Cn−1k
c = [[0] * 10 for _ in range(10)]
for i in range(1, 10):
c[i][0] = 1
c[i][i] = 1
for i in range(2, 10):
for j in range(1, i):
c[i][j] = c[i - 1][j - 1] + c[i - 1][j]
print(c[6][3]) # 20
时间复杂度: O ( n 2 ) O(n^2) O(n2)
二项式定理
( x + y ) n = ∑ k = 0 n C n k x n − k y k (x+y)^n = \sum\limits_{k=0}^n C_n^kx^{n-k}y^{k} (x+y)n=k=0∑nCnkxn−kyk
- 2 n = ∑ k = 0 n C n k 2^n = \sum\limits_{k=0}^nC_n^k 2n=k=0∑nCnk
- 0 = ∑ k = 0 n ( − 1 ) k C n k 0 = \sum\limits_{k=0}^n(-1)^kC_n^k 0=k=0∑n(−1)kCnk
- 3 n = ∑ k = 0 n 2 k C n k 3^n = \sum\limits_{k=0}^n2^kC_n^k 3n=k=0∑n2kCnk