[编程题]放苹果

这篇博客探讨了如何将M个苹果放入N个盘子中,允许盘子为空的不同分法。通过动态规划和递归两种解题思路,提供了具体的算法实现。输入输出描述清晰,适合编程爱好者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Talk is cheap, show me the code.

一、问题描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

输入:每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。

输入描述:

输入两个int整数

输出描述:

输出结果,int型

输入例子:

7 3

输出例子:

8

二、解题思路

1.第一种解法,利用动态规划的思想来解决。把 m 个苹果放进 n 个盘子里,分别考虑 min(m, n) 个子问题,即把 m 个苹果放进 i 个盘子里,这里 1 <= i <= min(m,n),注意这里放进去表示每个盘子里不能为空,那么就可以等同考虑为每个盘子里都放了一个苹果,即问题转化为需要把 m-i 个苹果放进 i 个盘子里,那么 dp[m, n] = dp[m-1,1]+…+dp[m-min(m,n),min(m,n)],只是这里要注意特殊情况,当 dp[m-i, i] 为零时其实方法是为 1 的而不是 0。初始化时dp[0][i] = 0, dp[i][1] &#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值