http://poj.org/problem?id=1664
解题思路:f(m,n) m个苹果放到n个盘子里
1、当只有一个苹果或只有一个盘子时只有1中放法
2、当盘子数大于苹果数时,最多为将m个苹果,在m的盘子中每个放一个 ,,即f(m,m)
3、当苹果数大于等于盘子数时:(两种情况)
1、不允许有空闲时,即每个盘子中至少有一个。。为f(m-n,n);
2、允许有空闲时,即至少有一个盘子是空闲的。。即f(m,n-1);
1 #include<iostream> 2 using namespace std; 3 int f(int m,int n){ 4 if(m==1||n==1||m==0)//m=0这种情况即为m个pingguo放进m个盘子里不允许有空闲 5 return 1; 6 else if(m<n) 7 return f(m,m); 8 else 9 return f(m-n,n)+f(m,n-1); 10 } 11 int main(){ 12 int t,m,n; 13 cin>>t; 14 while(t--){ 15 cin>>m>>n; 16 cout<<f(m,n)<<endl; 17 } 18 return 0; 19 }