【TFLSnoi李志帅】第⑨篇文章---递归经典

制作不易,请多多照()指()点(

老狮曰:做会这道题,你们的递归就没有问题了【狗头保命】

1206:放苹果


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 8429     通过数: 5362

【题目描述】

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

【输入】

第一行是测试数据的数目t(0≤t≤20)。以下每行均包含二个整数M和N,以空格分开。1≤M,N≤10。

【输出】

对输入的每组数据M和N,用一行输出相应的K。

【输入样例】

1
7 3

【输出样例】

8



——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
满分代码,抄吧请上眼

 

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,x,y;//n是测试数据的数目,x是苹果数,y是盘子数
 4 long long jh(int x,int y)
 5 {
 6     if(x==0 || y==1)return 1;//递归边界
 7     if(x<y)return jh(x,x);//当苹果数小于盘子数时,就相当于把n个苹果放进n个盘子里
 8     if(x>=y)return jh(x,y-1)+jh(x-y,y);//当苹果数大于等于盘子数时,就相当于把x个苹果放进1——>y-1个盘子里的情况数之和,再加上把多余(x-y)苹果放进y个盘子里的情况数之和(直到x-y<=y)
 9 }
10 int main()
11 {
12     cin>>n;
13     while(n--)
14     {
15         cin>>x>>y;
16         cout<<jh(x,y)<<endl;
17     }
18     return 0;
19 }

 

posted @ 2020-08-19 19:34  九州霜  阅读(265)  评论(0编辑  收藏  举报