Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other)
Problem Description
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
Output
对输入的每组数据M和N,用一行输出相应的K。
Sample Input
1
7 3
Sample Output
8
一个一个盘子来放苹果,但是后面放苹果数不能比前面的少,这样就不会重复了
1 #include<iostream> 2 using namespace std; 3 4 int so(int x,int j,int pan) 5 { 6 if(pan==1) 7 { 8 return 1; 9 } 10 int sum=0; 11 for(int i=j;i<=x/pan;i++) 12 { 13 sum+=so(x-i,i,pan-1); 14 } 15 return sum; 16 } 17 18 int main() 19 { 20 int n,i,j,k,sum,x,y;//x个苹果放进y个盘子 21 cin>>n; 22 for(i=0;i<n;i++) 23 { 24 sum=0; 25 cin>>x>>y; 26 if(y==1||x==1) 27 { 28 cout<<1<<endl; 29 continue; 30 } 31 for(j=0;j<=x/y;j++) 32 { 33 sum+=so(x-j,j,y-1); 34 } 35 cout<<sum<<endl; 36 } 37 return 0; 38 }