题目描述
把 m 个同样的苹果放在 n 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?用 k 表示不同的分法。5,1,1 和 1,5,1 是同一种分法。
输入输出格式
输入格式 第一行是测试用例的数目 t(0≤t≤20
)。以下每行均包含两个整数 m 和 n,以空格分开,1≤m,n≤10
。
输出格式 对输入的每个测试用例 m 和 n,用一行输出相应的 k。
输入输出样例1
输入
1
7 3
输出
8
#include<iostream>
using namespace std;
int f(int m,int n) //m个苹果 n个盘子
{
if(n==1 || m==0) //一个盘子只能将全部苹果放到一个盘子 f(2,2) 这种会遇到m==0然后返回1 不然少1
return 1;
if(m<n) //盘子大于苹果数
{
return f(m,m);
}
else return f(m,n-1) + f(m-n,n); //至少一个空盘子 和 全部盘子装一个
}
int main()
{
int t,m,n;
cin>>t;
while(t--)
{
cin>>m>>n;
cout<<f(m,n)<<endl;
}
return 0;
}