放苹果

举报
ReCclay 发表于 2022/02/22 02:10:07 2022/02/22
【摘要】 拿苹果 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问 共有多少种不同的分法?5,1,1和1,5,1 是同一种分法。 输入 第一行是测试数据的数目t(0 <= t &...

拿苹果

描述

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问
共有多少种不同的分法?5,1,1和1,5,1 是同一种分法。

输入

第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整
数M和N,以空格分开。1<=M,N<=10。

输出

对输入的每组数据M和N,用一行输出相应的K。

样例输入

1

7 3

样例输出

8

分析:

设i个苹果放在k个盘子里放法总数是 f(i,k),则: k > i 时, f(i,k) = f(i,i) k <= i 时,总放法 =
有盘子为空的放法+没盘子为空的放法 f(i,k) = f(i,k-1) + f(i-k,k)

注意:

这个没盘子为空的算法,首先做一步,往每个盘子放一个苹果。然后苹果剩下i-k,把他们放到k个盘子里面

#include <iostream>
using namespace std;

int f(int m, int n)
{
    if(m < n)
       return f(m, m);
    if(m == 0)
        return 1;
    if(n == 0)
        return 0;
    return f(m, n-1)+f(m-n, n);
}
int main()
{
    int T;
    int m, n;
    cin >> T;
    while(T--)
    {
       cin >> m >> n;
       cout << f(m, n) << endl;
    }
    return 0;
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/60865505

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。