此题就像将一个数m分成n个数的加法一样,因为此题不考虑顺序问题,所以我们在分类之前就就将最小的放到第一位。1,如果第一个盘子为0,则接下来m个苹果和n-1个盘子,为app(m, n-1),,当第一个盘子不是0的时候,使所有盘子的个数都加1,即app(m-n, n)这样接下来的的所有分配都离不开这两种情况。最后讨论n==0, m==0, n==1等情况。。。
#include<iostream>
#include<algorithm>using namespace std;
int app(int m, int n);
int main()
{
int t, m, n;
int sum;
cin>>t;
while(t--)
{
cin>>m>>n;
sum = app(m, n);
cout<<sum<<endl;
}
return 0;
}
int app(int m, int n)
{
if(m<0 || n<=0) return 0;
if(m==1 || n==1) return 1;
return app(m, n-1)+app(m-n, n);
}