666:放苹果
666:放苹果
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 把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
- 来源
- lwx@POJ
-
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 int t;//测试数据数量 7 int n;//苹果数 8 int m; //盘子数 9 int tot=0;//最多有几种放法 10 int f(int a,int b) 11 { 12 if(a<=1||b<=1)//当只有一个苹果或一个盘时,只有一种放法 13 return 1; 14 if(a<b) 15 return f(a,a);//苹果数<盘数,则最多只有b个盘有苹果 16 else 17 return f(a,b-1)+f(a-b,b);///如果有一个不放,则有 f(a,b-1)种;如果每个都放,则相当于 f(a-b,b) 18 } 19 int main() 20 { 21 22 cin>>t; 23 for(int i=1;i<=t;i++) 24 { 25 cin>>m>>n; 26 cout<<f(m,n)<<endl; 27 } 28 return 0; }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。