放苹果
题目描述
把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);
}

浙公网安备 33010602011771号