苹果:m
盘子:n
①如果m<n,则该情况可以变为m个苹果,m个盘子
②如果m>=n,则该情况接下来有两种可能:
1、n个盘子中有一个是空的
2、没有空盘子
如果m=0,则只有一种方法,即空着盘子
如果n=0,则无法放置
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int m,n;
int dfs(int m,int n)
{
if(m==0)return 1; //只有一种方法:空着盘子
if(n<=0)return 0; //无法放置
if(n>m)return dfs(m,m); //①
return dfs(m,n-1)+dfs(m-n,n); // ②
}
int main(){
int t;
cin>>t;
while(t--)
{
cin>>m>>n;
cout<<dfs(m,n)<<endl;
}
return 0;
}