zoukankan      html  css  js  c++  java
  • 递归_放苹果问题

    题目描述
    把 M 个同样的苹果放在 N 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
    注意:5、1、1 和 1、5、1 是同一种分法,即顺序无关。
    输入描述:
    输入包含多组数据。

    每组数据包含两个正整数 m和n(1≤m, n≤20)。
    输出描述:
    对应每组数据,输出一个整数k,表示有k种不同的分法。
    示例1
    输入

    7 3
    输出

    8

    #include <iostream>
    using namespace std;
    int dp(int m, int n)
    {
        // 递归出口:有0个苹果 || 只有1个盘子
        if (m == 0 || n == 1)
            return 1;
        if (n>m) // 盘子比较多,肯定有空盘子,去掉必空的盘子
            return dp(m, m);
        else // 苹果比较多:
            // 1:至少有一个空盘子,拿掉这个空盘子
            // 2:每个盘子都有苹果,各拿掉一个苹果(极限是最少的有1个苹果)
            return dp(m, n - 1) + dp(m - n, n);//前面一步是拿掉空盘子,后面是每次从每个盘子各拿掉一个苹果,直到盘子为空
    }
    int main()
    {
        int m, n;
        while (cin >> m >> n)
            cout << dp(m, n) << endl;
        return 0;
    }
    

      

  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/9744611.html
Copyright © 2011-2022 走看看