无视标题,从我做起

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个盒子”问题整理

浅谈"n个球"和"m个盒子"之间的乱伦关系的更多相关文章

  1. 浅谈C++中对象的复制与对象之间的相互赋值

    C++对象的复制 有时需要用到多个完全相同的对象,例如,同一型号的每一个产品从外表到内部属性都是一样的,如果要对每一个产品分别进行处理,就需要建立多个同样的对象,并要进行相同的初始化,用以前的办法定义 ...

  2. 浅谈 JVM 结构体系、类加载、JDK JRE JVM 三者的关系

    一.java类,创建.编译.到运行的工程: 1.随便建一个Java类,保存后就是一个.java文件, 2.然后我们使用 javac命令编译 .java文件,生产 .class文件. 3.再然后使用 j ...

  3. unity3D AR涂涂乐制作浅谈

    unity3D AR涂涂乐制作浅谈 AR为现在是虚拟现实较为火爆的一个技术,其中有个比较炫酷的就是AR涂涂乐的玩法,这个技术可以把扫描到的图片上的纹理 粘贴到模型上实现为模型上色的功能,但是我们需要怎 ...

  4. 浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法

    浅谈[0,1]区间内的n个随机实数变量中增加偏序关系类题目的解法 众所周知,把[0,1]区间内的n个随机.相互独立的实数变量\(x_i\)之间的大小关系写成一个排列\(\{p_i\}\),使得\(\f ...

  5. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  6. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  7. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  8. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  9. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

随机推荐

  1. 【安富莱二代示波器教程】第19章 附件E---参考资料

    第19章      附件E---参考资料 DSP教程 http://forum.armfly.com/forum.php?mod=viewthread&tid=3886 . FreeRTOS教 ...

  2. Dubbo工作原理,集群容错,负载均衡

    Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. Registry:服务 ...

  3. TensorFlow.org教程笔记(二) DataSets 快速入门

    本文翻译自www.tensorflow.org的英文教程. tf.data 模块包含一组类,可以让你轻松加载数据,操作数据并将其输入到模型中.本文通过两个简单的例子来介绍这个API 从内存中的nump ...

  4. [Swift]LeetCode139. 单词拆分 | Word Break

    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine ...

  5. [Swift]LeetCode367. 有效的完全平方数 | Valid Perfect Square

    Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...

  6. git push 时提示用户名或密码相关错误信息

    这里讲的是一个常见的第一次push提示输入用户名密码时,输入错误的解决办法.它导致在后面其他项目什么的在push的时候一直失败,并提示有用户名密码错误信息. 第一步:进入到“控制面板” (这里如何进入 ...

  7. 听说,霸都.NET技术社区准备搞线下聚会了?

    嗨,你听说了没有?霸都.NET技术社区准备搞线下聚会了! 啥时候的事情啊? 最近才知道的消息啊! 那你是从哪里知道的消息呢? .NET Core项目实战交流群(637326624)啊! 那这次合肥.N ...

  8. lambda表达式中的排序问题

    新月新气象,10月第一篇,这也是我工作的第一天,这一篇文章我们要讲到lambda的排序问题 我是这样排序的 var list = DB.company.OrderBy(x=>x.isfreeze ...

  9. @@ITENTITY

    @@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量.一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头.sele ...

  10. .NET中如何深度判断2个对象相等

    背景 最近在群里,有人问如何深度比较2个对象相等,感觉很有意思,就自己研究了一下,并写了一个开源的小类库,地址如下https://github.com/lamondlu/ObjectEquality. ...