将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空

原创 2012年03月31日 16:58:23

将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空,m>=n

盒子不能为空,所以可以当成将m-n个球放到n个盒子里,盒子可以为空。

比如将10个球放到5个盒子里,可以当成5个球放到5个盒子里,盒子能为空。接着,再分情况,将球分为

(5,0,0,0,0)

(4,1,0,0,0)或(2,3,0,0,0)

(3,1,1,0,0)或(2,2,1,0,0)

(2,1,1,1,0)

(1,1,1,1,1)

也就是1个盒子不能为空,2个盒子不能为空,3个盒子不能为空,到5个盒子都不能为空。

是不是跟一开始的时候很像,m个球放到n个盒子不能为空?这时候想到了什么?对,递归。

用一个函数fun(m,n)来获取m个球放到n个盒子里不能为空的情况(也可以用能为空的,这里用的是不能为空的)

上面的可以转换成

fun(5,1)+fun(5,2)+fun(5,3)+fun(5,1)+fun(5,0)    //其中n为0的情况即刚好每个盒子分到一个球,这个也要算进去

如果有非递归方法的,欢迎提出来探讨^_^,我自己的理解,不知道对错,有错请指出,谢谢!

//============================================================================
// Name        : test.cpp
// Author      : AstrayLinux
//============================================================================
#include <iostream>
using namespace std;

int fun(int m, int n) {
    if (m < n)   //m<n返回0
         return 0;
    if (n == 1 || (m - n) <= 1) //盒子为1时,球只有一个或0(0个即球刚好均分),时都只有一种分配方法
        return 1;

    int s = 0, count;   //s记录总数,count为递归次数

    if (m - n < n)       //去掉每个盒子分配的一个球后,球的数量少于盒子数,则只要递归球的个数次
        count = m - n;   //球数少的情况
    else
        count = n; //盒子数少的情况

    for (int i = 1; i <= count; i++) {
        s += fun(m - n, i); //递归
    }

    return s;
}

int main(int argc, char **argv) {

    cout << "\t";
    for (int i = 1; i <= 15; i++) {
        cout << i << "\t";
    }
    cout << endl;

    for (int i = 1; i <= 15; i++) {
        cout << i << "\t";
        for (int j = 1; j <= 15; j++) {
            cout << fun(i, j) << "    ";
        }
        cout << endl;
    }
}
//下面是结果 
//      1    2    3     4     5     6     7     8     9     10   11   12   13   14   15    
//1     1    0    0     0     0     0     0     0     0     0    0    0    0    0    0    
//2     1    1    0     0     0     0     0     0     0     0    0    0    0    0    0    
//3     1    1    1     0     0     0     0     0     0     0    0    0    0    0    0    
//4     1    2    1     1     0     0     0     0     0     0    0    0    0    0    0    
//5     1    2    2     1     1     0     0     0     0     0    0    0    0    0    0    
//6     1    3    3     2     1     1     0     0     0     0    0    0    0    0    0    
//7     1    3    4     3     2     1     1     0     0     0    0    0    0    0    0    
//8     1    4    5     5     3     2     1     1     0     0    0    0    0    0    0    
//9     1    4    7     6     5     3     2     1     1     0    0    0    0    0    0    
//10    1    5    8     9     7     5     3     2     1     1    0    0    0    0    0    
//11    1    5    10    11    10    7     5     3     2     1    1    0    0    0    0    
//12    1    6    12    15    13    11    7     5     3     2    1    1    0    0    0    
//13    1    6    14    18    18    14    11    7     5     3    2    1    1    0    0    
//14    1    7    16    23    23    20    15    11    7     5    3    2    1    1    0    
//15    1    7    19    27    30    26    21    15    11    7    5    3    2    1    1




                
版权声明:本文为博主原创文章,未经博主允许不得转载。

【NOIP】普及组 2014 问题求解

1.把M个同样的球放到N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?(用K表示)。例如,M=7,N=3时,K=8;在这里认为和是同一种放置方法。问:M=8,N=5时,K=_。2....
  • vmret
  • vmret
  • 2016年09月03日 11:51
  • 214

将m个相同的球全部放到n个相同的盒子里面有几种放法

盒子不能为空,所以可以当成将m-n个球放到n个盒子里,盒子可以为空。 比如将10个球放到5个盒子里,可以当成5个球放到5个盒子里,盒子能为空。接着,再分情况,将球分为 (5,0,0,0,0) (4,1...
  • wuyingzhiyi
  • wuyingzhiyi
  • 2015年03月24日 23:36
  • 2394

N个盒子M个物品,求装满盒子的最多

Yangyang loves AC题意: 给出Yangyang N天中每天达到happy 的最大值,他会从M个ACMer中得到happy值; 求他能最多达到happy的天数。 分析: 如果直接贪心显...
  • u013514722
  • u013514722
  • 2015年08月09日 10:52
  • 473

[ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)

放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25952   Accepted:...
  • sr19930829
  • sr19930829
  • 2014年07月30日 09:35
  • 2521

n个球放入m个盒子的方法

1. n个相同的球放入m个不同的盒子:   a. 不允许盒子为空: C(n-1,m-1)   b. 允许盒子为空:     C(n+m-1,m-1)  假设存在n+m-1个球,然后隔板 2. n个相同...
  • taoqick
  • taoqick
  • 2014年04月14日 16:23
  • 5617

UESTC 1721:吴神,人类的希望_n个相同的球放进m个相同的盒子的问题

Description 公元18906416年,由于歌者无节制的使用二向箔,整个宇宙都将不可避免的跌入二次元。为了拯救学弟们,吴神决定使用一种叫smxrwzdx的基本粒子创造一个新的宇宙,吴神发现,...
  • duanxian0621
  • duanxian0621
  • 2012年08月14日 14:30
  • 7358

小球与盒子问题小结

小球与盒子问题小结 1. 把n个不同的小球放进m个不同的盒子里,允许出现空盒子,共有多少种放法? m^n 2. 把n个不同的小球放进m个相同的盒子里,不允许出现空盒子,共有多少种放法? S2(n...
  • whai362
  • whai362
  • 2015年06月17日 20:47
  • 918

把m个球放到n个盒子里,有多少种方法 球盒问题,8种情况

一、序言 这个“N个球放M盒子问题”是很经典的排列组合了,论坛上也有经典的8种情况的解法。 论坛上讨论这8种情况的,我搜索了下(点左边查看搜索结果,还是有很多人在讨论的) 看了部分搜索结果,...
  • zhangjie1989
  • zhangjie1989
  • 2016年05月24日 10:54
  • 5522

将n个相同小球放入m个不同盒子内的放法种数

现在有10个球,要放进3个盒子里 ●●●●●●●●●● 隔2个板子,把10个球被隔开成3个部份 ●|●|●●●●●●●●、●|●●|●●●●●●●、●|●●●|●●●●●●、●|●●...
  • c6376315qqso
  • c6376315qqso
  • 2017年08月16日 14:50
  • 343

排列组合 "n个球放入m个盒子m"问题 总结

求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论。 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n 使用插板法:n个...
  • qwb492859377
  • qwb492859377
  • 2016年02月12日 15:11
  • 7518
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空
举报原因:
原因补充:

(最多只允许输入30个字)