• 12-分苹果(递归)


    Description

    把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
    #include <iostream>
    using namespace std;

    int f(int n, int m){
        if(n < m)           //苹果少于盘子时,相当余,将多的盘子放一边不管,反正用不上,
            return f(n, n);        //相当于将n个苹果放到n个盘子中随意放有多少种
        if(n == 0)
            return 1;       //没有苹果就都空,所以一种
        if(m == 0)
            return 0;      //有苹果无盘子放,方法放,
        return f(n, m-1) + f(n-m, m); //前一半是保证至少有一个空(先空一个,然后去放入m-1个盘子),
                                      //后一半是保证都非空,先一个盘子放一个(肯定非空了),再去将生的n-m个苹果放在任意盘子上
    }

    int main(){
        int n, m, c;
        cin >> c;
        while(c--){    
            cin >> n >> m;
            cout << f(n, m) << endl;
        }
        return 0;
    }
  • 相关阅读:
    IDEA中代码无故报红解决方法
    CAP原则的基本理论知识
    Java IO 拷贝MP3文件,包括递归子文件夹下的文件
    maven 配置阿里云镜像 settings.xml内容
    Restful API 级别及意义
    日常巡检(脚本)
    使用Matplotlib画图系列(一)
    Python 阶乘factorial
    交叉验证思想
    FeatureSelectors
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7347626.html
Copyright © 2020-2023  润新知