题解 | #放苹果#

放苹果

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))

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务