1、定义

隔板法就是在n个元素间插入(b-1)个板,即把n个元素分成b组的方法。C(n-1,b-1)

2、条件

隔板法必须满足三个条件:

(1)这n个元素必须相同,(2)所分成的每一组至少分得一个元素,(3)分成的组别彼此差异。

3、示例

(1)例如:某校组建一球队需16人,该校共10个班级,且每个班至少分配一个名额,共有几种情况。C(16-1,10-1)。

对n件相同物品(或名额)分给m个人(或位置),允许若干个人(或位置)为空的问题,可以看成将这n件物品分成m组,允许若干组为空的问题.将n件物品分成m组,需要m-1块隔板,将这n件物品和m-1块隔板排成一排,占n+m-1位置,从这n+m-1个位置中选m-1个位置放隔板,因隔板无差别,故隔板之间无序,是组合问题,故隔板有Cn+m-1 m-1种不同的方法,再将物品放入其余位置,因物品相同无差别,故物品之间无顺序,是组合问题,只有1种放法,根据分步计数原理,共有Cn+m-1 m-1×1=Cn+m-1 m-1种排法

(2)求方程x1+x2+…+xk=n的非负整数解或正整数解

解:正整数解:转化为10个相同的小球装入4个不同的盒子,每盒至少有一个,有C(10-1,4-1)=84种。

非负整数解:转化为10个相同的小球装入4个不同的盒子,可以有空盒,有C(10+4-1,4-1)种。

(3)X个相同的球放入Y个不相同的盒子中,要求每个盒子至多N个球至少0个球,共有多少种不同的放法?

首先对于m个球放入Y个盒中,每个盒中至少一个球的放法用隔板法可以得到,即相当于在m-1个位置中放入Y-1个挡板将m个球分为Y份,这样每份至少为1,为 ,

而X个球放入Y个盒中,每个盒中至少0个球的放法相当于X+Y个球放入Y个盒中,每个盒中至少一个球的放法,即相当于将X+Y个球分入Y个盒中,再从每个盒中取出1球,为

而对于指定t个盒子(例如1,2,3,···,t号盒子)中的球数至少为N+1个球的放法等同于将(X-t*(N+1))个球放入Y个盒中,每个盒中至少0个球的放法,即(X-t*(N+1))个球放入Y个盒中后,再在指定的t个盒中各放入N+1个球,为

根据容斥原理,每个盒子至多N球的放法为 总放法-所有指定一个盒子的球数大于N的方法+所有指定两个盒子的球数大于N的方法-所有指定三个盒子的球数大于N的方法+······

即为

其中

题目链接

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;ll n,m,k;const ll M=2*1e5+5;
ll fact[M],ifact[M];//fact[i]是i的阶乘,ifact[i]是阶乘的除法逆元,两者用于求组合数ll pow_mod(ll n,ll k,ll mod) //快速幂求n^k余m的结果
{ll res=1;n=n%mod;while(k>0){if(k&1)res=res*n%mod;n=n*n%mod;k>>=1;}return res;
}
void init()//初始化
{fact[0]=ifact[0]=1;for(int i=1;i<M;++i){fact[i]=(fact[i-1]*i)%mod;ifact[i]=pow_mod(fact[i],mod-2,mod);}
}ll C(ll n,ll m)//求组合数
{if(n<m)return 0;return  fact[n]*ifact[m]%mod*ifact[n-m]%mod;
}int main()
{init();int T;scanf("%d",&T);while(T--){scanf("%I64d%I64d%I64d",&n,&m,&k);ll X=k,Y=m,N=n-1;ll ans=C(X+Y-1,Y-1);for(ll t=1;t<=X/(N+1);t++){if((t&1)==0){ans=(ans+C(Y,t)*C(X+Y-1-t*(N+1),Y-1)%mod)%mod;}else{ans=(ans-C(Y,t)*C(X+Y-1-t*(N+1),Y-1)%mod+mod)%mod;}}printf("%I64d\n",ans%mod);}return 0;
}

排列组合---隔板法相关推荐

  1. 组合----隔板法分堆分配

    分析: 重复组合问题 <不考虑药品调剂顺序->组合->无序(固定的顺序,eg. ABC ACB etc. 只看作一种情况,那也就是说A B C的顺序是固定的,只能是其中一种)> ...

  2. 排列组合的简单应用(隔板法)

    高中数学的排列组合,在许多题目中也有应用.甚至可以达到更快的解题速度,同时也会减少时间复杂度. 一般应用 拿NYOJ的一道题为例.https://acm.nyist.edu.cn/p/210. 通过读 ...

  3. 高中数学基础05:排列、组合以及隔板法

    内容来自百度百科知识以及东方耀老师笔记内容的整合 1.排列组合基本概述 排列组合是组合学最基本的概念.所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序.组合则是指从给定个数的元素中仅仅取出 ...

  4. 排列组合中关于捆绑法、插空法、插隔板法

    捆绑法:当要求某几个元素必须相邻(挨着)时,先将这几个元素看做一个整体,(比如:原来3个元素,整体考虑之后看成1个元素)然后将这个整体和其它元素进行考虑.这时要注意:一般整体内部各元素如果在前后顺序上 ...

  5. python 排列组合算法_排 列 组 合 公 式 及 排 列 组 合 算 法

    排列组合--排列公式的推理和组合 [实操追 - 女资 - 源] [企鹅 : 10⒈ б .x.9 526] 加法原理和乘法原理,是排列组合中的二条基本原理,在解决计数问 题中经常运用.掌握这两条原理, ...

  6. 排列组合之插板法及变形

    主要用于"相同元素"分到"不同容器"的排列组合. [例1] 共有10本相同的书分到7个班里,每个班至少要分到一本书,问有几种不同分法? [解析]注意,这里面有个 ...

  7. 【数论】 排列组合中的隔板问题

    排列组合中的可以一个空插多个隔板的问题 但是现在要解决的情况是盒子可以分不到球.这样我们通过一步化归,转换为上面的情况:添加 nn 个球,使每个盒子至少有一个球.这样分完后只要将每个盒子多拿的一个球收 ...

  8. LeetCode 例题精讲 | 08 排列组合问题:回溯法的候选集合

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题:LeetCode 46 - Permutations[1]( ...

  9. c语言回溯法,回溯法 实现 排列组合(C 语言版本)

    * 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先 * 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中 * 产生一个正确的解,然后在以后的每一步搜索过程中,都检查其 ...

最新文章

  1. 安装配置Statspack
  2. RabbitMQ发布确认原理
  3. MySQL使用on duplicate key update时导致主键不连续自增
  4. jquery的ajax全局事件和AJAX 请求正在进行时显示“正在加载”
  5. Intellij_idea-15 常用快捷键
  6. 脑机接口的商业化道路,还要走多远多长?
  7. PHPWAMP自启异常,服务器重启后Apache等服务不会自动重启的原因分析
  8. 小红花代表什么_《送你一朵小红花》:细品后才知道,结尾处的平行世界代表着什么...
  9. InstallShield
  10. word行距设置教程
  11. 自门控激活函数Swish
  12. 使用线性回归,岭回归,Lasso回归预测鲍鱼年龄
  13. Jan. 1, 2020 at 7:47 a.m. GMT+8遇到这种时间,转换成中国标准时间
  14. SLE46C-40.K44P-M12安全传感器
  15. vmware设置内外网双网卡(均是独立IP)
  16. Macbook terminal: No application knows how to open问题
  17. 搜狗做AI:围绕语言,力出一孔
  18. socket服务器端和客户端通信——基础篇
  19. php. 生成器 send,PHP生成器细说
  20. 基于golang做一个简易私有网盘

热门文章

  1. 数学:SVM(2)点到直线距离
  2. 嵌入式:ARM常用开发编译软件介绍
  3. DNS服务转发功能参数forwarders first与forwarders only对比
  4. 最大数字字符串(leetCode179)
  5. c语言中定义符号常量必须用大写字母吗,C语言规定:定义符号常量时必须用大写字母。...
  6. Python可以开发哪些程序?
  7. linux服务器添加字体(宋体)
  8. ssh连接的时候,出现“THE AUTHENTICITY OF HOST XXX CAN’T BE ESTABLISHED”警告
  9. html table转excel单元格带背景颜色
  10. Multi-AP Specification V2.0 中文翻译 第10章 Link metric collection(链路度量采集)