poj 1664

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 }
原文地址:https://www.cnblogs.com/Bang-cansee/p/3236075.html