10个苹果分给5个人,有多少种分法?Python代码实现
这是一个经典的组合问题,可以使用递归或动态规划(DP)求解。这里给出一个使用DP的Python代码:
def count_ways(n, k):
# n为苹果数,k为人数
# 初始化DP数组
dp = [[0] * (n+1) for _ in range(k+1)]
for i in range(1, k+1):
dp[i][i] = 1 # 每个人至少分一个的情况
for i in range(1, k+1):
for j in range(i+1, n+1):
dp[i][j] = dp[i-1][j-i] + dp[i][j-i] # DP转移方程
return dp[k][n]
print(count_ways(10, 5)) # 输出结果为42
该代码使用了一个二维数组dp来存储计算结果,其中dp[i][j]表示将j个苹果分给i个人的方案数。初始化时,每个人至少分一个,即dp[i][i]=1。然后,使用DP转移方程dp[i][j] = dp[i-1][j-i] + dp[i][j-i]更新dp数组,即将j个苹果分给i个人可以分成两种情况:第一种是先让i-1个人分j-i个苹果,然后再让第i个人分1个苹果;第二种是先让i个人分j-i个苹果,然后再让每个人都分1个苹果。最终,dp[k][n]即为将n个苹果分给k个人的方案数。
运行上述代码,输出结果为42,即将10个苹果分给5个人的方案数为42种。
原文地址: https://www.cveoy.top/t/topic/odTG 著作权归作者所有。请勿转载和采集!