制作不易,请多多关照(注)指(点)点(赞)
老狮曰:做会这道题,你们的递归就没有问题了【狗头保命】
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 }