把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
数据范围:0<=m<=10,1<=n<=10
用m表示苹果个数,n表示盘子个数,分几种情况:
1、当没有苹果或没有盘子时,没有分法
2、当只有1个苹果,或只有1个盘子,就只有一种分法
3、当苹果数大于盘子数(m>n)时:
3.1、当没有空盘时:即(m,n)=(m-n,n)。意思是先将n个苹果放进那个盘子,就只剩下m-n个苹果分到n个盘子
3.2、有1个空盘,即(m,n)=(m,n-1)。意思是去掉一个盘子,就只剩m个苹果分到n-1个盘子
4、当苹果数小于盘子数(m<n)时:
4.1、即(m,n)=(m,m),相当于将m个苹果分到m个盘子中
递归
def put(m, n):
if m == 1 or n == 1:
return 1
if m < n:
return put(m, m)
else:
return put(m - n, n) + put(m, n - 1)

本文探讨了如何将m个苹果放入n个盘子的不同分法。当苹果数等于或小于盘子数时,分别给出了递归和动态规划的解题思路。在递归解法中,针对不同情况如无苹果、无盘子、苹果数大于盘子数等进行了分析;在DP方法中,利用状态转移方程解决此问题。数据范围限定在0<=m<=10,1<=n<=10。
最低0.47元/天 解锁文章
980

被折叠的 条评论
为什么被折叠?



