zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    OpenCV 环境搭建( Win7 32位 / VS2010 / OpenCV2.4.8 )
    OpenCV 简介
    计算机视觉简介
    使用 sigaction 函数实现可靠信号
    可靠信号机制
    信号机制的两个思考
    信号的接收和处理
    【angular5项目积累总结】列表多选样式框(1)
    数组相关方法积累(vueag等特别常用)
    Angular 4+ 修仙之路
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7347626.html
Copyright © 2011-2022 走看看