出处:https://blog.csdn.net/qwb492859377/article/details/50654627

  球,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论。

1.球同,盒不同,无空箱

  C(n-1,m-1), n>=m
  0, n<m

  使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙即可

2.球同,盒不同,允许空箱

  C(n+m-1,m-1)

  我们在第1类情况下继续讨论,我们可以先假设m个盒子里都放好了1个球,所以说白了就是,现在有m+n个相同的球,要放入m个不同的箱子,没有空箱。也就是第1种情况

3.球不同,盒相同,无空箱

  第二类斯特林数dp[n][m]
  dp[n][m]=m*dp[n-1][m]+dp[n-1][m-1],1<=m<n
  dp[k][k]=1,k>=0
  dp[k][0]=0,k>=1
  0,n<m

  这种情况就是第二类斯特林数,我们来理解一下这个转移方程。

  对于第n个球,如果前面的n-1个球已经放在了m个箱子里,那么现在第n个球放在哪个箱子都是可以的,所以m*dp[n-1][m];

  如果前n-1个球已经放在了m-1个箱子里,那么现在第n个球必须要新开一个箱子来存放,所以dp[n-1][m-1]

  其他的都没法转移过来

4.球不同,盒相同,允许空箱

  sigma dp[n][i],0<=i<=m,dp[n][m]为情况3的第二类斯特林数

  这种情况就是在第3种情况的前提下,去枚举使用的箱子的个数

5.球不同,盒不同,无空箱

  dp[n][m]*fact[m],dp[n][m]为情况3的第二类斯特林数,fact[m]为m的阶乘

  因为球是不同的,所以dp[n][m]得到的盒子相同的情况,只要再给盒子定义顺序,就等于现在的答案了

6.球不同,盒不同,允许空箱

  power(m,n) 表示m的n次方

  每个球都有m种选择,所以就等于m^n

7.球同,盒同,允许空箱

  dp[n][m]=dp[n][m-1]+dp[n-m][m], n>=m
  dp[n][m]=dp[n][m-1], n<m
  边界dp[k][1]=1,dp[1][k]=1,dp[0][k]=1

  现在有n个球,和m个箱子,我可以选择在所有箱子里面都放上1个球,也可以不选择这个操作。

  如果选择了这个操作,那么就从dp[n-m][m]转移过来

  如果没有选择这个操作,那么就从dp[n][m-1]转移过来

8.球同,盒同,无空箱

  dp[n-m][m],dp同第7种情况,n>=m
  0, n<m

  因为要求无空箱,我们先在每个箱子里面放1个球,然后还剩下n-m个球了,再根据情况7答案就出来了

【转】排列组合 "n个球放入m个盒子m"问题 总结的更多相关文章

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

    求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论. 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m0, n<m 使用插板 ...

  2. Luogu1287 | 盒子与球 (排列组合)

    贴一个和其他题解不一样的做法 QWQ 题意:让我们求出 N 个球放入 R 个盒子且每个盒子都必须放球方案数. 首先,对于每一个球,可以将其放入的盒子数量共有 R 个,所以我们可以知道如果无需满足每个盒 ...

  3. 输入三个double型的数据,放入到a,b,c三个变量中去,使用条件结构与交换逻辑将这三个变量中的值从小到大排列。

    import java.util.Scanner; public class C8{ public static void main(String []args){ /* 8.输入三个double型的 ...

  4. [leetcode] 题型整理之排列组合

    一般用dfs来做 最简单的一种: 17. Letter Combinations of a Phone Number Given a digit string, return all possible ...

  5. 将m个苹果放入n个盘子的问题【转】

    来自:http://blog.csdn.net/qq675927952/article/details/6312255 问题1: m----->相同, n---> 相同,可为空 将m个苹果 ...

  6. 排列组合+组合数取模 HDU 5894

    // 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...

  7. Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls 排列组合

    C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...

  8. r个有标志的球放进n个不同的盒子里,要求无一空盒,问有多少种不同的分配方案?

           由题意可知道r>=n,我原来想的是先取n个全排列,剩下的r-n个每个有n中选择,所以结果是n!*n^(r-n).经满神猜测,这样是会重复的.比如说,1到5个球,ABC三个盒子,ms ...

  9. 整理一点与排列组合有关的问题[组合数 Stirling数 Catalan数]

    都是数学题 思维最重要,什么什么数都没用,DP直接乱搞(雾.. 参考LH课件,以及资料:http://daybreakcx.is-programmer.com/posts/17315.html 做到有 ...

随机推荐

  1. Android_L(64bit) 模拟器配置及创建项目

    Android L可能就是Android 5.0.随之而来的还有Android Watch. Android TV. 而据说在10月中旬也就是15号Google的公布会上应该会推出Nexus 6和Ne ...

  2. 解决 php7 cli 模式下中文乱码的两中方法

    解决 php7 cli 模式下中文乱码的两中方法1. 给PHP文件开头加上 exec('chcp 936'); 然后把该文件以 ANSI 格式编码2. 在 php.ini 中设置 default_ch ...

  3. git 回滚到任意版本

    git回滚到任意版本 1.先显示提交的log $ git log -3 commit 4dc08bb8996a6ee02f Author: Mark <xxx@xx.com> Date: ...

  4. 63.C++异常

    #include <iostream> using namespace std; //异常与错误不一样,异常一般能正常工作 //错误就是程序无法正常工作,无法编译 //异常让程序在错误的输 ...

  5. #学习笔记#——JavaScript 数组部分编程(六)

    14. 题目描述 实现一个打点计时器,要求 1.从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1 2.返回的对象中需 ...

  6. DG archive gap

    什么是archive gap Archive Gap就是standby端日志应用的过程中丢失的一段范围的redo.典型的发生在standby端不能接收primary的redo信息或者接收后不能应用这些 ...

  7. background 背景认知

    background 背景 背景颜色 /*背景颜色为红色*/ p { background-color:ren; } 网页背景不仅可以设置颜色还可以插入图片 /*为背景插入图片*/ body { ba ...

  8. ELK+KAFKA安装部署指南

    一.ELK 背景 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如: ...

  9. 洛谷 P2867 [USACO06NOV]大广场Big Square

    P2867 [USACO06NOV]大广场Big Square 题目描述 Farmer John's cows have entered into a competition with Farmer ...

  10. hdu 3294 Girls&#39; research

    #include<stdio.h> #include<string.h> #define MAX 200020 char s[MAX],ss[MAX*2],str[2]; in ...