设f(m,n)为m个苹果,n个盘子的放法数目
1:若n>m,必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响,即f(m,n)=f(m,m)
2:若n<=m时,不同的放法可以分为两类:即有至少一个盘子空着或者所有盘子都有苹果,前一种情况相当于f(m,n)=f(m,n-1),后一种情况可以从每个盘子中拿走一个苹果,不影响不同放法的数目,即f(m,n)=f(m-n,n),总的放苹果的放法等于两者的和,即f(m,n)=f(m,n-1)+f(m-n,n)
#include<iostream>
#include<cstdlib>
using namespace std;
int count(int x,int y)
{
if(y==1||x==0)
return 1;
if(x<y)
return count(x,x);
return count(x,y-1)+count(x-y,y);
}
int main()
{
int m,n,t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&m,&n);
printf("%d\n",count(m,n));
}
system("pause");
return 0;
}