8类放球问题

放球问题简介

放球问题是一类很有意思的排列组合问题。通俗来说,就是把n个小球放到m个盒子里,问有几种放法。根据小球是否相同,盒子是否相同,是否允许有空盒,又可以把问题细分为8个具体的问题。其中有一些问题是非常简单的,有一些问题经常出现在一些经典的排列组合问题当中,有一些问题则比较有难度,难以通过一个表达式直接写出答案。

放球问题的解法

我们分8种情况具体讨论这个问题。假设有n个小球,m个盒子,且默认n ≥ \geq m。我们就从易到难,慢慢来分析。

1.球不同,盒不同,允许有空盒

这是最简单的一种情况。对于每个小球,有m种放法,一共有n个小球,于是一共有 m n m^n mn种放法。

2.球相同,盒不同,不允许有空盒

由于球相同,我们可以把每个球看成一个0,n个球组成了一个长度为n的全0序列。放小球的过程可以看成把这个序列分为m段,且每段长度大于0。于是我们就可以用隔板法解决了。问题相当于在这个长度为n的序列中插入m-1个隔板,从而就把序列分成了m段。这个序列有n-1个间隙,为了保证每段长度大于0,则只需要两块隔板不放在同一个间隙中。于是问题就变成了,在n-1个间隙中,挑选m-1个位置放隔板,即 C n − 1 m − 1 C_{n-1}^{m-1} Cn1m1种放法。

3.球相同,盒不同,允许有空盒

这个有两种做法。第一种做法是这样的。跟上面那种情况类似,也是看成一个序列,但是两个隔板是可以相邻的。n个球,m-1个隔板,一共长度为n+m-1。我们只需要在这个n+m-1个位置中选m-1个位置作为隔板即可,于是有 C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m1m1种放法。
第二种做法是,可以认为我们一开始有n+m个小球,先在每个盒中放上一个小球。于是问题就转化为了n+m个球放在m个盒子里,不允许有空盒的情况。套用上面的公式,得有 C n + m − 1 m − 1 C_{n+m-1}^{m-1} Cn+m1m1种放法。

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

到这里,问题开始变得难起来了。正难则反,我们反过来,考虑必定存在空盒的情况。这里我们采用容斥原理的方法做。由于盒子不同,给每个盒子从1-m编个号。令 A i A_i Ai表示第i个盒子是空的情况,|A|表示在A情况下的方案数。比如 ∣ A i ∣ |A_i| Ai表示第i个盒子一定是空盒的方案数,那么 ∣ A i ∣ = ( m − 1 ) n |A_i|=(m-1)^n Ai=(m1)n
∣ A i ∩ A j ∣ |A_i \cap A_j| AiAj表示第i个盒子和第j个盒子同时是空盒的情况数,即 ( m − 2 ) n (m-2)^n (m2)n种。我们要求有空盒的方案数,即 ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A m ∣ |A_1\cup A_2\cup \cdots \cup A_m| A1A2Am
根据容斥原理的公式,
∣ A 1 ∪ A 2 ∪ ⋯ ∪ A m ∣ = ∑ 1 ≤ i ≤ m ∣ A i ∣ − ∑ 1 ≤ i < j ≤ m ∣ A i ∩ A j ∣ + ∑ 1 ≤ i < j < k ≤ m ∣ A i ∩ A j ∩ A k ∣ − ⋯ + ( − 1 ) m − 1 ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A m ∣ = C m 1 ( m − 1 ) n − C m 2 ( m − 2 ) n + C m 3 ( m − 3 ) n − ⋯ + ( − 1 ) m − 1 C m m ( m − m ) n = ∑ k = 1 m ( − 1 ) k − 1 C m k ( m − k ) n |A_1\cup A_2\cup \cdots \cup A_m|=\sum_{1\leq i \leq m}{|A_i|}-\sum_{1\leq i<j \leq m}{|A_i \cap A_j|}+\sum_{1 \leq i<j<k \leq m}{|A_i \cap A_j \cap A_k|}-\cdots+(-1)^{m-1}|A_1 \cap A_2 \cap \cdots \cap A_m|=C_m^1(m-1)^n-C_m^2(m-2)^n+C_m^3(m-3)^n-\cdots +(-1)^{m-1}C_m^m(m-m)^n=\sum_{k=1}^m{(-1)^{k-1}C_m^k(m-k)^n} A1A2Am=1imAi1i<jmAiAj+1i<j<kmAiAjAk+(1)m1A1A2Am=Cm1(m1)nCm2(m2)n+Cm3(m3)n+(1)m1Cmm(mm)n=k=1m(1)k1Cmk(mk)n
必定存在空盒的方案数有 ∑ k = 1 m ( − 1 ) k − 1 C m k ( m − k ) n \sum_{k=1}^m{(-1)^{k-1}C_m^k(m-k)^n} k=1m(1)k1Cmk(mk)n种,那么不存在空盒的方案数有 m n − ∑ k = 1 m ( − 1 ) k − 1 C m k ( m − k ) n = ∑ k = 0 m ( − 1 ) k C m k ( m − k ) n m^n-\sum_{k=1}^m{(-1)^{k-1}C_m^k(m-k)^n}=\sum_{k=0}^m{(-1)^kC_m^k(m-k)^n} mnk=1m(1)k1Cmk(mk)n=k=0m(1)kCmk(mk)n
总的来说,求解的思路是通过容斥原理,把较难的不允许有空盒的情况转化为较为容易的允许有空盒的情况。

5.球不同,盒相同,不允许有空盒

这个问题跟上一个问题相比,仅仅是盒不同改成了盒相同,那么由于球不同,所以这个问题的放法是上面问题放法的 1 m ! \frac{1}{m!} m!1,即 1 m ! ∑ k = 0 m ( − 1 ) k C m k ( m − k ) n \frac{1}{m!}\sum_{k=0}^m{(-1)^kC_m^k(m-k)^n} m!1k=0m(1)kCmk(mk)n
由于该问题求解起来较为复杂,所以人们为这个问题专门定义了一个术语——第二类斯特林数。第二类斯特林数 S ( n , m ) S(n,m) S(n,m)表示将n个不同的小球放在m个相同的盒子中,不允许有空盒的方案数。
那么,根据我们的推导, S ( n , m ) = 1 m ! ∑ k = 0 m ( − 1 ) k C m k ( m − k ) n S(n,m)=\frac{1}{m!}\sum_{k=0}^m{(-1)^kC_m^k(m-k)^n} S(n,m)=m!1k=0m(1)kCmk(mk)n
同时,这也是 S ( n , m ) S(n,m) S(n,m)的通项公式。

6.球不同,盒相同,允许有空盒

相比于上面的问题,这个问题允许有空盒了。那么我们只需要枚举非空盒的个数,就能转化为上面的问题了。有i个非空盒时,方案数为 S ( n , i ) S(n,i) S(n,i)。于是总方案数为 ∑ i = 1 m S ( n , i ) \sum_{i=1}^m{S(n,i)} i=1mS(n,i)

7.球相同,盒相同,允许有空盒

这个问题可以用母函数的方法做,但是由于本人才疏学浅,没有学过母函数的方法,于是在这里提供一种递推的解法。
设方案数为 f ( n , m ) f(n,m) f(n,m)
先给出边界情况,当小球数为0或盒子数为1,肯定就只有1种方案了。
再分类讨论,给出递推关系式。
若小球数比盒子数少,则多出来的盒子只能空着,于是有 f ( n , m ) = f ( n , n ) , n < m f(n,m)=f(n,n),n<m f(n,m)=f(n,n)n<m
若小球数不比盒子数少,那么我们就要放小球了。整体思路是,把盒子排成一排,后面的盒子放的小球数不能超过前面盒子的小球数。这样枚举的话,才能不重不漏。我们考虑当前的最后一个盒子,有放小球和不放小球两种情况。如果空着,方案数为 f ( n , m − 1 ) f(n,m-1) f(n,m1)。如果要放小球,由于这个盒子的小球必须是最少的,所以前面所有盒子都要放一个小球,这样的方案数为 f ( n − m , m ) f(n-m,m) f(nm,m)
合起来,可以得到 f ( n , m ) f(n,m) f(n,m)的递推表达式
f ( n , m ) = { 1 n = 0 ∣ ∣ m = 1 f ( n , n ) n < m f ( n − m , m ) + f ( n , m − 1 ) n ≥ m f(n,m)=\begin{cases} 1 & n=0 || m=1 \\ f(n,n) & n<m \\ f(n-m,m)+f(n,m-1) & n\geq m \end{cases} f(n,m)= 1f(n,n)f(nm,m)+f(n,m1)n=0∣∣m=1n<mnm

8.球相同,盒相同,不允许有空盒

既然球跟盒都相同,那不妨拿出m个球,先在每个盒子里放上一个球。这样问题就转化为,将n-m个相同的小球放到m个盒子里,允许有空盒的问题了。方案数即为 f ( n − m , m ) f(n-m,m) f(nm,m)

代码

下面是我写的python代码

import math
def f(n,m):if n==0 or m==1:return 1if n<m:return f(n,n)return f(n-m,m)+f(n,m-1)
def S(n,m):return sum((-1)**k * math.comb(m, k) * math.pow(m-k, n) for k in range(m+1))/math.factorial(m)
def fangqiu(n,m,qiu,he,kong): #n表示球数,m表示盒数,qiu表示小球是否相同,he表示盒子是否相同,kong表示是否允许有空盒if qiu==0 and he==0 and kong==1:return m**nif qiu==1 and he==0 and kong==0:return math.comb(n-1,m-1)if qiu==1 and he==0 and kong==1:return math.comb(n+m-1,m-1)if qiu==0 and he==0 and kong==0:return S(n, m)*math.factorial(m)if qiu==0 and he==1 and kong==0:return S(n, m)if qiu==0 and he==1 and kong==1:return sum(S(n,i) for i in range(1,m+1))if qiu==1 and he==1 and kong==1:return f(n,m)if qiu==1 and he==1 and kong==0:return f(n-m,m)
n,m=map(int,input().split())
print(int(fangqiu(n,m,0,0,1)))

总结

虽然我们按一定的标准,划分出了8个问题,但其实这8个问题又有很多变种。比如,我们只关注了 n ≥ m n\geq m nm的情况,我们得出的结论一部分对 n ≤ m n\leq m nm适用,一部分却不适用了。掌握解决这一类问题的方法比记住结论更加重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

516 最长回文子序列(区间DP)(灵神笔记)

题目 最长回文子序列 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s …

shell实验

1&#xff0e;编写脚本for1.sh&#xff0c;使用for循环创建20账户&#xff0c;账户名前缀由用户从键盘输入&#xff0c;账户初始密码由用户输入&#xff0c;例如&#xff1a;test1、test2、test3、....、test10 编写脚本&#xff0c;使用read -p提醒用户从键盘输入账户名前缀以…

[论文笔记]GTE

引言 今天带来今年的一篇文本嵌入论文GTE, 中文题目是 多阶段对比学习的通用文本嵌入。 作者提出了GTE,一个使用对阶段对比学习的通用文本嵌入。使用对比学习在多个来源的混合数据集上训练了一个统一的文本嵌入模型,通过在无监督预训练阶段和有监督微调阶段显著增加训练数…

hdlbits系列verilog解答(移位寄存器)-23

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 您将获得一个具有两个输入和一个输出的模块 my_dff &#xff08;实现 D 触发器&#xff09;。实例化其中的三个&#xff0c;然后将它们链接在一起以形成长度为 3 的移位寄存器。端口 clk 需要连接到所有实例。…

三篇论文:速览GPT在网络安全最新论文中的应用案例

GPT在网络安全领域的应用案例 写在最前面论文1&#xff1a;Chatgpt/CodeX引入会话式 APR 范例利用验证反馈LLM 的长期上下文窗口&#xff1a;更智能的反馈机制、更有效的信息合并策略、更复杂的模型结构、鼓励生成多样性和GPT类似的步骤&#xff1a;Conversational APR 对话式A…

Windows VS C++工程:包含目录、库目录、附加依赖项、附加包含目录、附加库目录配置与静态库、动态库的调用——以OCCI的配置为例

文章目录 1 包含目录&#xff08;Include Directories&#xff09;/ 附加包含目录&#xff08;Additional Include Directories&#xff09;1.1 区别和作用1.2 设置路径 2 库目录&#xff08;Library Directories&#xff09;/ 附加库目录&#xff08;Additional Library Direc…

element ui el-table表格纵向横向滚动条去除并隐藏空白占位列

需求 当table内容列过多时&#xff0c;可通过height属性设置table高度以固定table高度、固定表头&#xff0c;使table内容可以滚动 现在需求是右侧滚动条不好看&#xff0c;需要去除滚动条&#xff0c;并隐藏滚动条所占列的位置 // ----------修改elementui表格的默认样式-…

Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同

可以使用 jQuery 的子选择器&#xff08;Child Selector&#xff09;或 find() 方法来获取子元素。 子选择器&#xff08;Child Selector&#xff09;&#xff1a; 使用父元素的选择器和 > 符号来选取该父元素的子元素。 例如&#xff1a;选取 id 为 parent 的元素内所有 cl…

Spring MVC的常用注解

目录 RequestMapping 例子&#xff1a; RequestMapping 支持什么类型的请求 使 RequestMapping 只支持特定的类型 RestController 通过 HTTP 请求传递参数给后端 1.传递单个参数 注意使⽤基本类型来接收参数的情况 2.传递多个参数 3.传递对象 4.RequestParam 后端参数…

配置Super-VLAN下的DHCP服务器示例

组网需求 如图1所示&#xff0c;某公司拥有两个部门&#xff0c;为了节省IP地址&#xff0c;部门A和部门B规划为同一网段&#xff1b;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN中。企业管理员为了方便统一管理&#xff0c;希望部门内终端通过DHCP服务器动…

npm 彻底卸载

问题&#xff1a; 执行 npm -v 指令出现如下报错&#xff1a; ERROR: npm v10.2.1 is known not to run on Node.js v12.10.0. This version of npm supports the following node versions: ^18.17.0 || >20.5.0. 分析&#xff1a; 由于编译环境问题&#xff0c;需要更新…

[Linux]文件路径名称含有‘/‘以及‘.‘的书写规则

用Linux就少不了命令行&#xff0c;用命令行就少不了天天和各种奇奇怪怪的文件路径打交道&#xff0c;运行深度学习项目每次都会遇到找不到文件的问题&#xff0c;所以弄清楚文件路径到底怎么写是一个很重要的问题&#xff1b; /的用法&#xff1a;绝对路径与相对路径 通法&a…

Linux编译安装brpc

一、安装brpc依赖项目 &#xff08;1&#xff09;安装 protobuf wget https://github.com/protocolbuffers/protobuf/releases/download/v21.9/protobuf-cpp-3.21.9.tar.gz tar -zxvf protobuf-cpp-3.21.9.tar.gz cd protobuf-3.21.9/ mkdir build && cd build cmake…

NX二次开发后处理中保存tcl变量值到文本

直接上代码&#xff1a; static bool GetTclValue(UF_MOM_id_t mom_id, char *szName, char *szInfo, std::string &stValue,bool bShowValue /* false*/) {UF_MOM_ask_string(mom_id, szName, (const char **)&szInfo);if (szInfo){stValue szInfo;if (bShowValue){…

【Spring】快速入门Spring Web MVC

文章目录 1. 什么是Spring Web MVC1.1 MVC1.2 Spring MVC 2. 使用Spring MVC2.1 项目创建2.2 建立连接2.2.1 RequestMapping 注解2.2.2 RestController 注解2.2.3 RequestMapping 使⽤2.2.4 RequestMapping 是什么请求&#xff1f;POST&#xff1f;GET&#xff1f;…&#xff1…

FL Studio21最新中文版DAW数字音频工作站

大概从去年开始&#xff0c;“电子音乐制作技术”成为越来越常见的说法。一开始我们觉得这种说法太过于笼统&#xff0c;因为电子音乐制作的技术早已不限于用在电子音乐&#xff0c;它更像是现代音乐制作技术。毕竟现代化的90%的音乐都是这么做出来的。 对&#xff0c;我们说的…

ESP32-C3 低功耗懒人开关:传统开关轻松上云和本地控制

项目背景 随着科技的快速发展&#xff0c;智能家居已经成为我们日常生活的一部分。而对于基础设施已经配备完毕的家庭而言&#xff0c;对家居设备的智能化改造是一项相对困难的工作。本文将分享一款基于 Wi-Fi 的低功耗懒人开关—— “ESP32-C3 管灯熊猫”。将智能的 “ESP32-…

Spring概述

Spring概述 Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台&#xff0c;它最初是由 Rod Johnson 编写的&#xff0c;并且于 2003 …

【EI会议征稿】 2024年遥感、测绘与图像处理国际学术会议(RSMIP2024)

2024年遥感、测绘与图像处理国际学术会议(RSMIP2024) 2024 International Conference on Remote Sensing, Mapping and Image Processing 2024年遥感、测绘与图像处理国际学术会议(RSMIP2024)将于2024年1月19日-21日在中国厦门举行。会议主要围绕遥感、测绘与图像处理等研究领…

蒸散发与植被总初级生产力的区域数据下载、处理与显示

植被总初级生产力(GPP)是指植物通过光合作用吸收的碳&#xff0c;是陆地生物圈和大气之间最大的碳通量&#xff0c;GPP的准确量化对于理解气候变化中生态系统功能、农业生产和碳循环的动态以及对气候的反馈具有重要意义 蒸散发&#xff08;Evapotranspiration&#xff0c;ET&a…