浅谈"n个球"和"m个盒子"之间的乱伦关系
无视标题,从我做起
update in 2018.10.1:
补充了"至多为1的四中情况"
这玩意儿的官方名字应该是叫"Twelvefold way",共用12种情况。
球异,盒同
不空
该情况为经典的第二类斯特灵数
设\(f[n][m]\)表示答案。
\(f[n][m] = f[n - 1][m - 1] + m \times f[n - 1][m]\)
边界条件:\(f[0][0] = 1\)
答案 = 第\(n\)个数单独占一个盒子 + 第\(n\)个数和之前的数共占一个盒子,同时考虑不同位置的贡献
注意最后要乘\(m\),因为第\(n\)个数放置的位置对答案是有影响的
例如{1}{2 4}{3}与{1}{2}{3 4}是不同的方案
可空
直接枚举用了多少个盒子
设\(g[n][m]\)表示答案
则\(g[n][m] = \sum_{i = 0}^m g[n][i]\)
至多放\(1\)
此类"至多放\(1\)"的问题若\(n>m\)则方案数一定为\(0\)
答案为\([n <= m]\)
球异,盒异
可空
每一个球都有\(m\)种放法,故答案为\(m^n\)
不空
设\(g[n][m]\)表示答案,\(s[n][m]\)为第二类斯特灵数
则\(g[n][m] = s[n][m] \times m!\)
相当于是考虑\(m\)个盒子的顺序
至多放\(1\)
\(ans = m!(m-1)! \dots (m - n + 1) ! = \frac{m!}{(m-n)!}\)
球同,盒异
不空
插板法的经典例题
\(n\)个球之间形成\(n - 1\)个空位,把\(m\)个盒子塞到里面
方案为\(C_{n - 1}^{m - 1}\)
可空
注意这里不能直接套用“插板法”得到\(C_{n+1}^{m - 1}\)
因为使用插板法的前提条件之一就是“分成的方案不能为空”
考虑先在每个盒子中放一个小球,那么剩下的小球再往里放的时候就可以无视“非空的条件了”
故方案为\(C_{n+m-1}^{m - 1}\)
这里再补充一下为什么不能直接套用插板法
比如\(n = 2, m = 3\)时,方案为\(6\),而直接套用插板法得到的答案为\(3\)。
究其原因,是因为没有考虑到两个板同时占了一个空位的情况。
至多放\(1\)
考虑每个球放在了哪里。
\(ans = C_m^n\)
球同,盒同
可空
这种情况下,不同方案之间与具体用了哪个球以及放到了哪个盒子里都没有必然的联系
区分不同方案的方法是:把每个盒子的球的个数从小到大排序,比较最终的情况是否相同
例如:\(1 \ 7 \ 1\)与\(1 \ 1 \ 7 \\)实际是一种方案
对于\(n = 8, m = 3\)而言一共有\(10\)种不同的放法
| 0 | 0 | 8 |
|---|---|---|
| 0 | 1 | 7 |
| 0 | 2 | 6 |
| 0 | 3 | 5 |
| 1 | 1 | 6 |
| 1 | 2 | 5 |
| 1 | 3 | 4 |
| 2 | 3 | 4 |
| 3 | 3 | 3 |
从上面的分析我们也不难得出结论
\(n\)个相同的小球放到\(m\)个相同的盒子里,盒子可以为空的方案数 与一个整数\(n\)拆成\(m\)段非递减序列的方案数相同
设\(f[n][m]\)表示\(n\)个小球放到\(m\)个相同的盒子里,盒子可以为空的方案数
边界条件为\(f[0][k] = 1, f[1][k] = 1, f[k][1] = 1\)
递推方程\(f[n][m] = \begin{cases} f[n - m][m] + f[n][m - 1] &n >= m \\ f[n][m - 1] &n < m \end{cases}\)
解释一下:
我们考虑这\(m\)个位置中是否有空盒子
显然:答案 = \(m\)个位置中至少有\(1\)个位置为空的方案 + \(m\)个位置中全不为空的方案
不空
我们可以先在所有盒子里都放了一个,然后对剩下的球讨论
同样可以得到一个结论:
\(n\)个相同的球,放到\(m\)个相同的盒子里,盒子不能为空的方案数 与把整数\(n\)拆成\(m\)段,每段不能为\(0\)的方案数相同
设\(g[n][m]\)表示\(n\)个小球放到\(m\)个相同的盒子里,盒子不能为空的方案数
则\(g[n][m] = f[n - m][m]\),
至多放\(1\)
\(ans = [n <= m]\)
参考资料
浅谈"n个球"和"m个盒子"之间的乱伦关系的更多相关文章
- 浅谈C++中对象的复制与对象之间的相互赋值
C++对象的复制 有时需要用到多个完全相同的对象,例如,同一型号的每一个产品从外表到内部属性都是一样的,如果要对每一个产品分别进行处理,就需要建立多个同样的对象,并要进行相同的初始化,用以前的办法定义 ...
- 浅谈 JVM 结构体系、类加载、JDK JRE JVM 三者的关系
一.java类,创建.编译.到运行的工程: 1.随便建一个Java类,保存后就是一个.java文件, 2.然后我们使用 javac命令编译 .java文件,生产 .class文件. 3.再然后使用 j ...
- unity3D AR涂涂乐制作浅谈
unity3D AR涂涂乐制作浅谈 AR为现在是虚拟现实较为火爆的一个技术,其中有个比较炫酷的就是AR涂涂乐的玩法,这个技术可以把扫描到的图片上的纹理 粘贴到模型上实现为模型上色的功能,但是我们需要怎 ...
- 浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法
浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法 众所周知,把[0,1]区间内的n个随机.相互独立的实数变量\(x_i\)之间的大小关系写成一个排列\(\{p_i\}\),使得\(\f ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
随机推荐
- python制作词云
需要模块wordcloud,pip install wordcloud安装即可.代码: , #边距background_color='black',#指定背景颜色font_path='simhei.t ...
- hadoop基础操作
通过hadoop上的hive完成WordCount 启动hadoop Hdfs上创建文件夹 上传文件至hdfs 启动Hive 创建原始文档表 导入文件内容到表docs并查看 用HQL进行词频统计,结果 ...
- [Swift]LeetCode671. 二叉树中第二小的节点 | Second Minimum Node In a Binary Tree
Given a non-empty special binary tree consisting of nodes with the non-negative value, where each no ...
- websocket+rabbitmq实战
1. websocket+rabbitmq实战 1.1. 前言 接到的需求是后台定向给指定web登录用户推送消息,且可能同一账号会登录多个客户端都要接收到消息 1.2. 遇坑 基于springbo ...
- Python档案袋( Socket 与 ScoketServer 通信 )
Socket有一个缓冲区,缓冲区是一个流,先进先出,发送和取出的可自定义大小的,如果取出的数据未取完缓冲区,则可能存在数据怠慢.其中[recv(1024)]表示从缓冲区里取最大为1024个字节,但实际 ...
- Kubernetes因限制内存配置引发的错误
今天对一个pod进行内存资源调整后, 一直卡在ContainerCreating的状态, 执行describe命令查看该 Pod 详细信息后发现如下 . [root@master-01 ~]# kub ...
- 一个.NET Core开发者的Linux入门学习笔记
用.NET Core开发也有一段时间了,但是由于工作原因一直都是在Windows系统上进行的开发,一直想学习Linux然后把.NET Core开发的程序跑在Linux上,然后把心得体会记录一下发布再博 ...
- vs17 破解密钥
Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Visual Studio 2017(VS201 ...
- Zara精讲C#.Cache、它和Redis区别是什么???
前言:今天在博客园看到大佬在用Cache,非常不懂,原来它是搞缓存的,原来我只知道Redis是搞这个的,才知道有这个玩腻. 那它们的区别是什么呢?? 区别: redis是分布式缓存,是将数据随机分配到 ...
- C#操作进程(Process)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...