dp方程
dp[n][r]=dp[n-1][r]+dp[n-1][r-1]
边界条件
dp[r][0]=1
开始条件
i=1,i<=MAX
j=1,j<=i
MAX = 100
dp = [
[
0 for i in range(MAX + 1)
]
for i in range(MAX + 1)
]
def fac(n):
return 1 if n < 2 else n * fac(n - 1)
def comb(n, r):
return fac(n) // fac(r) // fac(n - r)
# dp[n][r]=dp[n-1][r]+dp[n-1][r-1]
# dp[r][0]=1
for i in range(MAX + 1):
dp[i][0] = 1
for i in range(1, MAX + 1):
for j in range(1, i + 1):
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]
for i in range(0, MAX + 1):
for j in range(0, i + 1):
print(i, j, dp[i][j], comb(i, j))
0 0 1 1
1 0 1 1
1 1 1 1
2 0 1 1
2 1 2 2
2 2 1 1
3 0 1 1
3 1 3 3
3 2 3 3
3 3 1 1
4 0 1 1
4 1 4 4
4 2 6 6
4 3 4 4
4 4 1 1
5 0 1 1
5 1 5 5
5 2 10 10
5 3 10 10
5 4 5 5
5 5 1 1
6 0 1 1
6 1 6 6
6 2 15 15
6 3 20 20
6 4 15 15
6 5 6 6
6 6 1 1
7 0 1 1
7 1 7 7
7 2 21 21
7 3 35 35
7 4 35 35
7 5 21 21