直接看代码:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
int apple(int m, int n)
{
if(n > m) return apple(m,m);
if(m == 0) return 1;//(m - n) >= 0 ;
if(n == 0) return 0;//临界条件,注意:二者不可调换,需先判断苹果数是否为0 ;
return apple(m-n,n) + apple(m,n-1);//(m >= n) 可转化为没有盘子为空 和 至少有一个盘子为空;
}
int main()
{
int t,m,n;
cin>>t;
while(t--)
{
cin>>m>>n;
cout<<apple(m,n)<<endl;
}
return 0;
}