隔板法的妙用

devtools/2024/10/19 1:28:34/

文章目录

      • 问题引入
      • 隔板法衍生问题
      • 隔板法进阶问题
      • 总结:
      • **所有项x>=1(一般情况)**
      • **如果某项x >= 1 + i **
      • **如果某项x >=0 (允许盒子为空情况)**

问题引入

在一次歌唱比赛中,有三位竞选者。现有5位专业评审,每人有一票,而为了不让任何一人难堪,每位竞选者都至少会获得一票,问:一共有多少种票数的分配方法呢?

思考

那么该问题 应为 排列组合问题中 球同,盒不同 , 不允许空盒 情况

数据范围较小时,可以把每种情况列举出来

例如保证每个人都有一张票,此时还剩2张票分给三个人 两张票 一人只能一张:C 3 2,两张票 一人只能两张:

C 3 1

数据范围较大时,这种就比较困难了

因此引入隔板法来优化解题思路

就是想办法将5张票分为3堆一堆分给一个人

在5 张票之间(4个空隙插入两个隔板,就是三堆 : C 4 2

请添加图片描述

若将上述票数扩大为100,同理 100 张票分成三堆 , 需要2个隔板,插在100张票之间(99个空): C 99 2

这就是一般的隔板法(需保证各项都>=1

将问题抽象化

三位竞选者的票数分别为x,y,z,则有关系式 x + y + z = 5 , x , y , z >= 1

那么问题就转化为 x + y + z = n 的正整数解个数

隔板法的本质就是m元一次方程正整数解个数

x1+x2+x3+…+xm = n :

将n分为n个1,将n个1分为m堆,一个元分一堆 : C n-1 m-1

隔板法衍生问题

学校有10个推优名额分给1,2,3班,那么每个班级获得的推优名额数不小于班号的分法有几种?

将问题抽象化

1,2,3班的名额分别为x , y , z ,则有 x + y + z = 10, 其中 x >= 1 , y >= 2 , z >= 3

  • 一般的隔板法问题要求 堆中个数>=1

将问题转化为一般隔板法问题

u = y - 1 -> u >= 1

v = z - 2 -> v >= 1

x + u + v = 7

或者可以思考为

将每班的推优名额先固定为班号,因此剩下了4个名额,4个名额随机分给这三个班, 每个班多分的名额大于等于0,可以利用公式将该项优化为>=1,具体操作看总结

隔板法进阶问题

学校马上要举行校运会了,有众多志愿岗位需要被分配。但是负责老师临时有事现在由你来分配这些岗位。
现在有n个岗位,m位志愿者,每个岗位至少需要ai​个志愿者,你需要将志愿者分配到岗位上,并且可以有志愿者空闲下来作预备。
请你给出可能的分配情况总数。

​ 答案可能会很大,故需要对998,244,353取模。

​ 注:所有岗位需求志愿者的总和不超过志愿者的总和且志愿者间无差别。

1<=n<=1000,1<=ai<=m<=2000

通过一组样例来分析

3个岗位,每个岗位要求1,2,3人,一共10人

  • 首先转化为一般隔板法问题,我们可以先将这些岗位上人填满剩余的人随机分配至这些岗位

  • 所以开设的岗位a=1,b=2,c=3, 这些岗位还需要a >= 0 , b >= 0 ,c >= 0剩余4人

  • 本题中说到你需要将志愿者分配到岗位上,并且可以有志愿者空闲下来作预备

  • 因此我们需要在多设置一个岗位用来存空闲者该岗位可以有人,也可以无人),但这个岗位首先是0,因此这个岗位x>=0

  • 可列出隔板法方程 a + b + c + x = 4,(a,b,c,d>=0

  • 但此时a,b,c,d均>=0,不满足隔板法条件,进行优化

  • 得出最终方程 aa + bb + cc + xx = 8 ,(aa,bb,cc,dd>=1

  • 8个人分4个岗位,隔板法,C(7,3)

还有一种思路类似

  • 将每个岗位留一个人,每个岗位上还需至少一个1才可以,此时剩余7个人
  • 因此开设的岗位为a=0,b=1,c=2 这些岗位还需要 a >= 1, b >= 1 , c >= 1 人,剩余7人
  • 可将该问题分为两部分:有空余人员和没有空余人员
  • 空余人员,a + b + c = 7a,b,c>=1隔板法C(6,2)
  • 空余人员,开设空余岗位x(此时x>=1,因为x=0在无空余人员时考虑过了),a + b + c + x = 7a,b,c,x>=1)(a,b,c>=1
  • 将上述两种情况相加即可

求组合数的方法有多种(dp递推求组合数,乘法逆元求组合数),具体可看数论模块写的代码实现

总结:

对于x1+x2+x3+…+xm = n

所有项x>=1(一般情况)

一般隔板法问题,直接用公式(n-1个间隙中插入m-1个隔板)C(n-1,m-1)

**如果某项x >= 1 + i **

用票数解释

可以理解为x至少1+i张票 ,因此我们可以先给它分i张票 , 在进行隔板法给它分1或多张票的情况

x1+x2+x3+…+xm = n

如果x1 >= 1+i

因此我们可以设 xx1 =x1 - i ,xx1 >= 1, 同时等式右边也应减去i : n=n-i

原式转化为xx1+x2+x3+…+xm = n - i

如果某项x >=0 (允许盒子为空情况)

那么该情况应为 球同,盒不同 , 允许空盒

用票数解释

可以理解为x可以没有票,那我们可以先给它1张票,再进行隔板法给它分票(这样就可以分到空票了),分完再给它拿回来

x1+x2+x3+…+xm = n x1 >= 0 -> xx1 >= x1+1 , n=n+1

xx1+x2+x3+…+xm = n + 1 -> C n+1-1 m-1

如果均 >=0,上述式子可改为

x1+x2+x3+…+xm = n + m(m个1) -> C n+m-1 m-1


http://www.ppmy.cn/devtools/91222.html

相关文章

Chapter 23 数据可视化——地图

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、基础绘图二、视觉映射三、案例分析 前言 随着地理信息系统&#xff08;GIS&#xff09;技术的迅猛发展和大数据时代的到来&#xff0c;数据可视化已经成为分析和理…

【异常】npm install 出错几种解决方案

npm install 出错解决方案 \node-v16.20.2\npm.cmd install npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue-antd-jeecg3.0.0 npm ERR! Found: webpack4.47.0 npm ERR! node_modules/webpack npm ERR! webpack"^4…

深度学习-----------数值稳定性

目录 神经网络的梯度数值稳定性的常见两个问题例子&#xff1a;MLP 梯度爆炸梯度爆炸的问题 梯度消失梯度消失的问题 总结模型初始化和激活函数让训练更加稳定让每层的方差是一个常数 权重初始化正向均值和方差正向均值正向方差 反向均值和方差Xavier初始正向和反向的均值和方差…

【教师秘籍】AI预测学生未来?职场规划大揭秘!

​声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2150.html 嘿老师们&#xff0c;你们有没有和我一样的烦恼&#xff1a;学生各有千秋&#xff0c;家长各有各的操心&#xff0c;信息一箩筐却总是不够用&#xff1f;&am…

使用 NumPy 生成随机数:一个全面的指南

NumPy 是 Python 编程语言中最流行的科学计算库之一&#xff0c;它提供了一个强大的 np.random 模块&#xff0c;用于生成各种类型的随机数。在本文中&#xff0c;我们将详细介绍如何使用 NumPy 生成随机数&#xff0c;包括正数、负数、整数和小数&#xff0c;并展示如何限制它…

Linux系统使用Docker安装RStudio服务并实现任意浏览器远程访问

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

Spring统一功能处理:拦截器、响应与异常的统一管理

目录 一.拦截器 二.统一数据返回格式 三.统一异常处理 一.拦截器 拦截器是Spring框架提供的核⼼功能之⼀&#xff0c;主要⽤来拦截⽤⼾的请求&#xff0c;在指定⽅法前后&#xff0c;根据业务需要执⾏预先设定的代码。 也就是说&#xff0c;允许开发⼈员提前预定义⼀些逻辑…

JavaEE-多线程编程定时器(多线程完结篇)

定时器就是闹钟的效果&#xff0c;指定要一个任务&#xff08;runnable&#xff09;&#xff0c;指定一个时间&#xff0c;此时这个任务不会立马去执行&#xff0c;而是时间到了才会去执行&#xff0c;这个过程称为——定时执行/延时执行。 日常开发中定时执行是一个非常重要的…