python动态规划组合数最大,动态规划 求解组合数

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值