放苹果

题目描述

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

1
7 3

输出

8

递归方法思路

把n个苹果分到m个盘子,也就是求f(n, m),有两种情况
如果n > m
一种是最终的分法中存在空盘子的情况,也就是因为空盘子不影响结果,就相当于把n个苹果分到m-1个盘子里面去 也就是count = (n, m - 1)
一种是不存在空盘子的情况,也就是那么肯定所有的盘子上都至少有一个苹果,那么所有的分法就是count = (n - m, m)
如果n < m
那么就相当于求f(m, m)

递归代码

int dfs(int n, int m)//n个苹果放到m个盘子里面
{
    if(n == 0 || m == 1)return 1;//只有一个盘子或者只生一个苹果那么就只有一种分法
    if(n < m)return dfs(n, n);//苹果数量小于盘子数量,空盘子不影响结果,去掉
    return dfs(n - m, m) + dfs(n, m - 1);
}
posted @ 2021-05-19 17:58  梨花满地  阅读(162)  评论(0)    收藏  举报