MT【100】经典计数之分配问题
注意:此讲适合联赛一试学生,以及参加清华北大等名校的自主招生的学生.
经典计数之分配问题:把n个球放进k个盒子。考虑分配方法有三类:1.无限制 2.每个盒子至多一个(f 单的)3.每个盒子至少一个(f 满的).球和盒子都只考虑两种极端情况:全同或全不同。这样一共会有3*2*2=12种分配情况,如下:
证明:
1.略
2.此时只考虑k≥n这种有意义情况,由分步计数原理易得(k)n=k(k−1)⋯(k−n+1)
3.此时只考虑n≥k这种有意义情况,第一步将n球分成k部分有S(n,k)种方法,第二步
分好的k部分球放到k个不同的盒子里有k!种排法.所以完成这件事情一共有k!S(n,k)种方法.
这里S(n,k)定义如下:
4.方程x1+x2+⋯+xk=n的非负整数解.
5.此时只考虑k≥n这种有意义情况,由于“f单”意味着每个盒子里至多放一个球,只需
k个盒子里取n个,然后取出的盒子各放一个球。
6.方程x1+x2+⋯+xk=n的正整数解.
7.n元集至多分成k部分.
8.定义
9.n元集的k部分拆数为第二类stirling数S(n,k)
10.正整数n至多分成k个部分。这里分拆数p(n,k)定义如下:
注意:这里说的分拆是不计较各部的次序的,比如4的分拆为2,1,1一种。但4的有序分拆有三个(2,1,1);(1,2,1);(1,1,2).一般而言有序分拆好处理.比如n的k部有序分拆就是x1+x2+⋯+xk=n的正整数个数.
显然p(n,1)=p(n,n−1)=p(n,n)=1;p(n,2)=[n2],当k>n时p(n,k)=0一般的p(n,k)没有简单的表示方法.
注:(n1,n2,⋯,nk)≥表示n1≥n2≥⋯≥nk≥1
原则上所有p(n,k)可有递推式逐个求得,例如:
11.定义
12.只需考虑n≥k的情况,正整数n的k部分拆p(n,k)
注:当然除了这12种情况外还有一些情况,比如盒子中有部分相同部分不同。但往往这样
的情况的考察意义不大,因为很难期望会有一般的计数公式.
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 想让你多爱自己一些的开源计时器
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析