F - 放苹果
POJ - 1664
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
Output
对输入的每组数据M和N,用一行输出相应的K。
Sample Input
1
7 3
Sample Output
8
解法:递归,两种情况。
- m<n 至少有一个盘子为空,去掉一个空盘子不影响排列次数,f(m,n)=f(m,n-1)
2.m>=n 如果盘子都有苹果,则都去掉一个也不影响排列次数,此时f(m,n)=f(m-n,n),如果有盘子为空则此时f(m,n)=f(m,n-1),所以此情况f(m,n)=f(m-n,n)+f(m,n-1)
递归出口为,m=0,返回1,n=1,返回1。
代码:
#include<iostream>
using namespace std;
int apple(int m,int n){
if(m==0||n==1)
return 1;
if(m<n)
return apple(m,n-1);
else
return apple(m-n,n)+apple(m,n-1);
}
int main()
{
int num;
cin>>num;
while(num--){
int m,n;
cin>>m>>n;
cout<<apple(m,n)<<endl;
}
}