joy-1120

首先我们想象有一个函数count  f(m,n)可以把m个苹果放到n个盘子中。

 

根据 n 和 m 的关系可以进一步分析:

  特殊的m <=1|| n <= 1时只有一种方法;

  当 m < n时,即使苹果每个盘子放一个也没法放满所有盘子,题目允许有的盘子空着不放,所以我们可以将空盘子去掉,即 f ( m , n ) = f ( m , m );

  当 m >= n时,这时候有两种情况:

  n 个盘子中有一个空盘子,当有空盘子时,f ( m , n ) = f ( m , n - 1 );

  n个盘子中没有空盘子,当没有空盘子时也就是说每个盘子中至少有一个苹果,先把所有盘子填满,这时候会剩下 m - n 个苹果,所以现在问题变成了 m - n 个苹果放在 n 个盘子有多少种方法,即 f ( m - n , n )。

      所以当m>=n时,放置苹果的总情况为 f ( m , n - 1 )+ f ( m - n , n )次。

  具体代码实现如下:

#include <iostream>
using namespace std;
int count(int m, int n)
{

    if (m <=1|| n <= 1) 
        return 1;
    if (m < n)
        return count(m, m);
    else
        return count(m, n - 1) + count(m - n, n);
}
int main()
{
    int apples, plates;
    cin >> apples >> plates;
    
    cout << count(apples, plates) << endl;

    return 0;
}

 

 

分类:

技术点:

相关文章:

  • 2021-11-21
  • 2021-09-26
  • 2021-10-24
  • 2019-11-20
  • 2021-12-12
  • 2022-01-02
  • 2021-07-09
猜你喜欢
  • 2021-09-30
  • 2021-10-10
  • 2021-07-16
  • 2022-01-02
  • 2021-12-03
  • 2021-12-14
  • 2021-11-02
相关资源
相似解决方案