poj 1664 递归

来源:互联网 发布:淘宝开店卖什么赚钱 编辑:程序博客网 时间:2024/05/16 05:51

题意:中文题, 不解释.

思路:递归.

         因为当盘子中的苹果为1或者盘子只有一个显然只有一.

         考虑一般情况;这时分两种状况:

         1:每个盘子都有苹果,这时应该将你n - m个苹果放入m个盘子内,随机的.

         2:至少有一个盘子没有苹果,这时就是将m个苹果放入n - 1个盘子内,随机的.

         但如果苹果数小于盘子数时,此时一定至少有n - m个盘子是空的,所以就转化成m个苹果放入m个盘子内.

         代码如下:

#include <cstdio>

#include <iostream>

using namespace std;

int f(int m, int n)

{
    if(m == 1 || n == 1 || m == 0 || n == 0)
        return 1;
    if(m >= n) return f(m - n, n) + f(m, n - 1);
    if(m < n) return f(m, m);    
}

int main(void)
{
    int t, m, n;
    scanf("%d", &t);
    while(t--){
        scanf("%d %d", &m, &n);
        int sum = f(m ,n);
        printf("%d\n", sum);
    }
    return 0;    
}

原创粉丝点击