【组合数学 隔板法 容斥原理】放球问题

本文所属分类

组合数学汇总

8类放球问题

放球问题是一类很有意思的排列组合问题。通俗来说,就是把n个小球放到m个盒子里,问有几种放法。具体可以从3个维度,每个维度2种情况,共8种情况:
维度一:小球是否相同。
维度二: 盒子是否相同。
维度三: 是否容许盒子为空。

一,球相同,盒不同

隔板法: 球一字排开,用m-1个隔板隔开。

容许盒子为空

m-1个隔板。第一个隔板有n+1 个位置放,第二个隔板n+1+1个位置放 ⋯ \cdots 。(n+1) × \times ×(n+2) ⋯ \cdots (n+m-1) 就是排列 P n + m − 1 m − 1 _{n+m-1}^{m-1} n+m1m1 由于不关心隔板的顺序。故是
故是:C n + m − 1 m − 1 _{n+m-1}^{m-1} n+m1m1

不容许盒子为空

m-1个隔板,每个隔板有n-1个位可以放。由于不能为空,所有两个隔板不能放到同一个位置,球的左右边缘也不能放隔板。从n-1位置选择m-1个隔板,故:C n − 1 m − 1 _{n-1}^{m-1} n1m1

二,球相同,盒相同

令 cnt[i]记录第i个盒子放的球数,由于球、盒子都相同。如果排序后cnt1和cnt2相同,则是同一种方案。为了避免重复,我们只枚举cnt按升序排序的方案。

容许盒子为空

如果 n < m,前面m-n个盒子一定为空,后面的n个盒子可能空,也可能非空。故f(n,m) = f(n,n)情况一
如果 n >= m,如果第一个盒为空则:f(n,m) = f(n,m-1) 情况二;如果第一个盒子不为空,所有盒子都必须放一i个球:则f(n,m) = f(n-m,m)情况三
当m等于1是,只有一个盒子,只能把所有球,全部放到一个盒子中。故 f(?,1) =1 。
当n为0时,所有盒子都为空。故 f(0,?) =1 。
三种情况,至少n或m减少,故一定会让 n <= 0或m <=1。
那会不会 n 没有变成0,直接变成负数?
只有情况三会让n减少 ,情况三的前提是 n >= m,故n的新值n-m必定大于等于0。
m不会在变成1之前,变成0或负数。
情况一: m= n,由于函数未提前结束,说名n > 0。故m也大于0。
情况二:函数未结束,说明m >1,故m-1 >=1。
总结:
f ( n , m ) = { 1 ( 0 = = n ) 或 ( 1 = = m ) f ( n , n ) n < m f ( n , m − 1 ) + f ( n − m , m ) o t h e r f(n,m)=\begin{cases}1 && (0==n)或(1==m)\\ f(n,n) && n < m \\ f(n,m-1)+ f(n-m,m) && other \\ \end{cases} f(n,m)= 1f(n,n)f(n,m1)+f(nm,m)(0==n)(1==m)n<mother

不容许盒子为空

每个盒子放一个球,就变成容许为空。
g ( x ) = { 0 n < m f ( n − m , m ) o t h e r g(x)=\begin{cases} 0 && n < m \\ f(n-m,m) && other\\ \end{cases} g(x)={0f(nm,m)n<mother

三,球不同,盒不同

容许盒子为空

每个球都有m个盒子可以放,不会重复。故f(n,m) = mn

不容许盒子为空

所有情况(总方案数): mn
至少一个空盒子的情况: C m 1 _{m}^{1} m1(m-1)n
至少两个空盒子的情况:C m 2 _{m}^{2} m2(m-2)n
⋮ \vdots
至少m-1个盒子的情况:C m m − 1 _{m}^{m-1} mm1(m-(m-1))n
令f(i) = ( − 1 ) i + 1 C m i ( m − i ) n (-1)^{i+1}C_m^i(m-i)^n (1)i+1Cmi(mi)n
根据容斥原理,有空盒子不重复的方案数为:
∑ i : 1 m − 1 \sum_{i:1}^{m-1} i:1m1f(i) ,f(m)=0,故: ∑ i : 1 m − 1 \sum_{i:1}^{m-1} i:1m1f(i) 就是 ∑ i : 1 m \sum_{i:1}^{m} i:1mf(i)
令 g(i) = -f(i) = ( − 1 ) i C m i ( m − i ) n (-1)^iC_m^i(m-i)^n (1)iCmi(mi)n

不包括空盒子的方案数为:
总方案数- 有空盒子的方案数= mn + ∑ i : 1 m \sum_{i:1}^{m} i:1mg(i) = (-1)0C m 0 _m^0 m0(m-i)n + ∑ i : 1 m \sum_{i:1}^{m} i:1mg(i) = ∑ i : 0 m \sum_{i:0}^{m} i:0mg(i)

四,球不同,盒相同

不容许盒子为空

球不同盒不同(n,m) = m! × \times × 球不同盒相同(n,m)
m个不同的盒,共有m种不同的顺序,盒相同时,仅顺序不同是相同的。故扣除。
故结果为: 1 m ! \frac 1 {m!} m!1 ∑ i : 0 m \sum_{i:0}^{m} i:0mg(i) 就是第二类斯特林数的通项公式S(n,m)。

容许盒子为空

分类讨论:
0 个空盒子: S(n,m)
1个空盒子: S(n,m-1)
⋮ \vdots
m-1个空盒子:S(n ,m-(m-1))
累加后: ∑ i : 1 m \sum_{i:1}^m i:1mS(m,i) 可以理解为球实际放在1到m个盒子中。

题解:

似乎不是放球问题【组合数学 放球问题】1621. 大小为 K 的不重叠线段的数目
球不同盒子相同,不能为空【放球问题】920. 播放列表的数量
球同盒子不同能为空【放球问题 乘法原理 唯一分解定理】1735. 生成乘积数组的方案数
球同盒子不同不能为空【动态规划 组合数学 放球问题】2338. 统计理想数组的数目

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

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

相关文章

对象业务的追加写接口

类似文件的追加写操作&#xff0c;在对象的末尾增加新的数据内容。 本文有如下假定&#xff1a; 对象存储服务基于文件语义实现。使用PUT方式上传的对象&#xff0c;内部使用一个文件和对应的元数据来承载。使用多段方式上传的对象&#xff0c;内部使用多个段文件、元数据来承…

【面试题-012】什么是Spring 它有哪些优势

文章目录 Spring有哪些优势有哪些优势Spring和Springboot区别在 Spring 框架中&#xff0c;什么是AOP核心概念应用场景 Spring有哪些通知类型 Spring 是一个开源的 Java 平台&#xff0c;由 Rod Johnson 创建&#xff0c;用于简化企业级 Java 应用程序的开发。它于 2003 年首次…

T-Pot多功能蜜罐实践@debian12@FreeBSD

T-Pot介绍 T-Pot是一个集所有功能于一身的、可选择分布式的多构架&#xff08;amd64&#xff0c;arm64&#xff09;蜜罐平台&#xff0c;支持20多个蜜罐和很多可视化选项&#xff0c;使用弹性堆栈、动画实时攻击地图和许多安全工具来进一步改善欺骗体验。GitHub - telekom-sec…

15.FreeRTOS数据结构:StreamBuffer,MessageBuffer和Queue的区别

FreeRTOS数据结构&#xff1a;StreamBuffer&#xff0c;MessageBuffer和Queue的区别 介绍 在嵌入式系统开发中&#xff0c;任务间的通信是非常重要的一部分。FreeRTOS提供了多种数据结构来实现任务间的通信&#xff0c;包括StreamBuffer&#xff0c;MessageBuffer和Queue。这…

SpringBootWeb登录认证

JWT令牌 JSON Web Token JSON Web Tokens - jwt.ioJSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signatur…

MogDBopenGauss查询重写规则uniquecheck

在MogDB&openGauss中&#xff0c;参数rewrite_rule用于控制查询重写&#xff0c;本文介绍查询重写规则uniquecheck uniquecheck表示提升无agg的where子查询 现在有如下例子 orcl> explain analyze select count(*)from test01 t1where t1.data_object_id (select data…

文件系统和日志分析

文件系统 概述 文件是存储在硬盘上的。硬盘上的最小存储单位是扇区&#xff0c;每个扇区的大小是512字节。 inode号&#xff1a;又叫索引号&#xff0c;保存的是元信息&#xff08;主要有文件的属性 &#xff1a;包括权限&#xff0c;创建者&#xff0c;创建日期等&#xff…

Nodejs 调用langchain的实验

langchain 支持js/ts 语言&#xff0c;可以在nodeJs 中调用langchain 。这有利于在网站后台软件中使用&#xff0c;本博文记录做的小实验。 安装与升级 升级node 直接在官网下载&#xff0c;重新安装就可以了。 安装大模型模块 npm install openai 安装langchain npm insta…

Renesas MCU之使用e² studio搭建开发环境

目录 概述 1 e studio介绍 2 搭建Renesas MUC开发环境 2.1 软件版本信息 2.2 安装软件 3 创建工程 3.1 板卡硬件接口 3.2 FSP配置IO 4 Generate Project 4.1 项目目录介绍 4.2 LED接口相关驱动 5 调试 5.1 测试代码 5.2 J-Link调试代码 5.3 硬件结构 概述 本文主…

ES6-01-简介

一、什么是ES6&#xff1f; 每年一个版本o(╥﹏╥)o。 二、javaScript新特性的特点 1、语法简洁&#xff0c;功能丰富&#xff1b; 2、框架开发应用。 3、岗位需求&#xff01; 三、let关键字 3-1、声明变量 let a;let a,b;let e100;let f521, gmilk-love, h[]; 3-2、声明的…

python采集汽车价格数据

python采集汽车价格数据 一、项目简介二、完整代码一、项目简介 本次数据采集的目标是车主之家汽车价格数据,采集的流程包括寻找数据接口、发送请求获取响应、解析数据和持久化存储,先来看一下数据情况,完整代码附后: 二、完整代码 #输入请求页面url #返回html文档 imp…

Linux C/C++目录操作

获取当前目录 #include <unistd.h>char *getcwd(char *buf,size_t size); char *get_current_dir_name(void);//注意释放内存 malloc() free()切换工作目录 #include <unistd.h>int chdir(const char *path);//0成功&#xff0c;其他失败&#xff08;目录不存在…

fbd编程语言:深度解析与未来展望

fbd编程语言&#xff1a;深度解析与未来展望 在编程语言的浩瀚海洋中&#xff0c;fbd编程语言以其独特的魅力和潜力&#xff0c;逐渐引起了开发者的关注。那么&#xff0c;fbd编程语言究竟有何特别之处&#xff1f;它的发展前景又如何呢&#xff1f;本文将从四个方面、五个方面…

PostgreSQL的视图pg_class

PostgreSQL的视图pg_class 在 PostgreSQL 中&#xff0c;pg_class 是一个系统目录表&#xff0c;用于存储所有关系&#xff08;如表、索引、视图、序列等&#xff09;的元数据。pg_class 是数据库系统的重要组成部分&#xff0c;包含了关于每个关系的具体信息。 pg_class 视图…

数据结构基础篇(7)

二十三.串、数组和广义表 -串的定义 零个或多个任意字符组成的有限序列串的术语 - 子串&#xff1a;一个串中任意连续字符组成的子序列&#xff08;含空串&#xff09;叫该串的子串- 主串&#xff1a;包含子串的串对应叫主串- 字符位置&#xff1a;字符在序列中序号是该字符串…

react-intl国际化在项目中的使用

前言 使用成熟的第三方库的国际化&#xff0c;可以直接使用封装好的方法&#xff0c;这个国际化的原理其实是使用了react 的第三方库react-intl &#xff0c;感觉主要比较好的就是使用其中的模版&#xff0c;它的本质还是通过了Provider的形式 第一步新建文件夹&#xff0c;计…

Python 限制输入数的范围

Python 限制输入数的范围 在 Python 编程中&#xff0c;我们经常需要限制用户输入的数据范围&#xff0c;以避免一些可能出现的问题。例如&#xff0c;在一个游戏程序中&#xff0c;我们可能想要确保玩家的分数在某个范围内&#xff0c;而不是太高或太低。在这个博文中&#x…

minos 2.4 中断虚拟化——中断子系统

首发公号&#xff1a;Rand_cs 该项目来自乐敏大佬&#xff1a;https://github.com/minosproject/minos 前面讲述了 minos 对 GICv2 的一些配置和管理&#xff0c;这一节再往上走一走&#xff0c;看看 minos 的中断子系统 中断 中断描述符 /** if a irq is handled by minos…

属性(property)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 1 创建用于计算的属性 在Python中&#xff0c;可以通过property&#xff08;装饰器&#xff09;将一个方法转换为属性&#xff0c;从而实现用于计算…

几种更新 npm 项目依赖的实用方法

引言 在软件开发的过程中&#xff0c;我们知道依赖管理是其中一个至关重要的环节。npm&#xff08;Node Package Manager&#xff09; 是 Node.js 的包管理器&#xff0c;它主要用于 Node.js 项目的依赖管理和包发布。随着项目的不断发展&#xff0c;依赖库的版本更新和升级成…