题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
m,n= map(int,input().split())
def count_ways(m, n):
# 初始化一个二维数组 dp,大小为 (m+1) * (n+1)
dp = [[0] * (n + 1) for _ in range(m + 1)]
# 边界条件,当没有苹果时只有一种方法
for i in range(n + 1):
dp[0][i] = 1
# 动态规划计算
for i in range(1, m + 1):
for j in range(1, n + 1):
if j > i:
#如果 n > m,即盘子多于苹果,那么这个问题就等价于 n = m 的情况,因为多余的盘子可以为空
dp[i][j] = dp[i][i]
else:
# 如果 n <= m,我们可以分为两种情况:
# 1.至少有一个盘子是空的,此时问题转化为将 m 个苹果放入 n-1 个盘子中;
# 2.每个盘子至少有一个苹果,此时我们先给每个盘子分配一个苹果,问题转化为将剩下的 m-n 个苹果放入 n 个盘子中。
dp[i][j] = dp[i][j-1] + dp[i-j][j]
return dp[m][n]
print(count_ways(m,n))

字节跳动公司福利 1371人发布