zoukankan      html  css  js  c++  java
  • “隔板法”详解

    理解隔板法

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

    应用隔板法必须满足的3个条件:

    1. n个元素是相同的
    2. k个组是互异的
    3. 每组至少分得一个元素

    公式

    将n个相同的求放到m个不同的盒子里的个数为:$C_{n-1}^{m-1}$

    例如,把10个相同的球放入3个不同的箱子,每个箱子至少一个,问有几种情况?  $C_{n-1}^{m-1} = C_9^2$

    隔板法应用

    普通隔板法

    例1.求方程x+y+z=10的正整数解的个数。

    分析:将10个求排成一排,球与球之间形成9个空隙,将两个隔板插入这些空隙中(每空至多插一块隔板),规定由隔板分成的左、中、右三部分的球数分别为x、y、z的值,则隔板法与解的个数之间建立了一一对应关系,故解的个数为C(n-1, m-1) = C(9, 2) = 36.

    添元素隔板法

    例2. 求方程 x+y+z=10的非负整数解的个数。

    分析:注意到x、y、z可以为零,故例1解法中的限定“每空至多插一块隔板”就不成立了,怎么办呢?只要添加三个球,给x、y、z各添加一个球,这样原问题就转化为求 x+y+z=13的正整数解的个数了,则问题就等价于把13个相同小球放入3个不同箱子,每个箱子至少一个,有几种情况?易得解的个数为C(n+m-1,m-1)=C(12,2)=66(个)。

    例3.把10个相同的小球放到3个不同的箱子,第一个箱子至少1个,第二个箱子至少3个,第3个箱子可以为空,有几种情况?

    我们可以在第二个箱子先放入10个小球中的2个,小球剩8个放3个箱子,然后在第三个箱子放入8个小球之外的1个小球(即补充了一个球),则问题转化为把9个相同小球放3不同箱子,每箱至少1个,几种方法?C(8,2)=28

    (减元素隔板法)

    例4. 将20个相同的小球放入编号分别为1,2,3,4的四个盒子中,要求每个盒子中的球数不少于它的编号数,求放法总数。

    分析:先在编号1,2,3,4的四个盒子内分别放0,1,2,3个球,剩下14个球,再把剩下的球分成4组,每组至少1个,由例1知方法有C(13,3)=286(种)。

    添板插板法

    例5.有一类自然数序列,从第三个数字开始,每个数字都恰好是它前面两个数字之和,直至不能再写为止,如1 4 5 9,5 8 13等等,这类数共有几个?

    分析:因为前2位唯一确定了整个序列,只要求出前两位的所有情况即可,设前两位为a和b

    显然a + b <= 9,且a不为0.

    设1_1_1_1_1_1_1_1_1    1代表9个1,_代表8个空位.

    我们要把9分成两组,但b可以为0,我们先给b一个1,然后就相当于把10个球放入(a, b)两不同的盒子里,每个盒子至少放一个,C(9, 1),但这是错误的,为什么?因为1不一定要全部放入。其实解决这个问题可以这么想,我们引入一个盒子c放a、b取完后剩下的1,所以保证c中球数大于0,需要再增加一个球,题目等价于,11个球放入3个不同的箱子,每个箱子至少放一个,C(10, 2).

    例5另一种解法:

    显然a + b <= 9,且a不为0.

    设1_1_1_1_1_1_1_1_1_ _    1代表9个1,_代表8个空位.

    之前我们可以在9个空位中插入2个板,分成3组,第一组取到a个1,第二组取到b个1,但此时第二组始终不能取空。若在末尾添加两个空,第二组就能取到空,所以共有C(10, 2).

    选板法

    例6.有10粒糖,如果每天至少吃一粒(多不限),吃完为止,求有多少种不同吃法?

    分析:o_o_o_o_o_o_o_o_o_o   o代表10个糖,_ 代表9个空,所以10块糖,9个空,插入9块隔板,每个板都可以选择放或不放,相邻两板间的糖一天吃掉,这样共有

    2^9=512啦.

    分类插板法

    例7.小梅有15块糖,如果每天至少吃3块,吃完为止,那么共有多少种不同的吃法?

    分析:

    此问题不能用插板法的原因在于没有规定一定要吃几天,因此我们需要对吃的天数进行分类讨论 
    最多吃5天,最少吃1天 
    1: 吃1天或是5天,各一种吃法 一共2种情况 
    2:吃2天,每天预先吃2块,即问11块糖,每天至少吃1块,吃2天,几种情况? C(10, 1)=10 
    3:吃3天,每天预先吃2块,即问9块糖,每天至少1块,吃3天? C(8 ,2)=28 
    4:吃4天,每天预先吃2块,即问7块糖,每天至少1块,吃4天?c(6 ,3)=20 
    所以一共是 2+10+28+20=60 种 .

    逐步插板法  

    我觉得叫逐步插空法更好,为什么?看例题

    例8.在一张节目单中原有6个节目,若保持这些节目相对次序不变,再添加3个节目,共有几种情况?
    分析:可以用一个节目去插7个空位,再用第二个节目去插8个空位,用最后个节目去插9个空位,所以一共是C(7, 1)×C(8, 1)×C(9, 1)=504种.

    OJ例题

    1.[ZOJ3557]How Many Sets II

    题意:从n个小球中取m个小球,不能取相邻的小球的方案数.

    这道题是插板法的经典应用
    首先我们拿出m个小球,还剩下n-m个小球。这n-m个小球一共有n-m+1个空(左右两边也可以),把这m个小球插入到这n-m+1个空里就是答案,即$C_{n-m+1}^m$
    这m个小球的编号取决于它插入的位置,所以和选哪个小球没关系.

    2.hdu 3037 Saving Beans

    题意:有n个不同的盒子,在每个盒子中放一些球(可以不放),使得总球数≤m,求方案数(mod p).

    方法一:

    设最后放了k个球,根据"隔板法"由方案数C(k+n-1,n-1),:<br>
    ans=C(n-1,n-1)+C(n,n-1)+C(n+1,n-1)+……+C(n+m-2,n-1)+C(n+m-1,n-1)<br>
    &nbsp; &nbsp; &nbsp;=C(n+m,n);(mod p)

    方法二:

    这个题和原来不一样的地方:总球数≤m,一般我们就是总球数就是m,所以我们可以增加一个盒子,现在n+1个盒子,现在假设就要放m个球,n来来放k个球,剩下的m-k就放在那个我们增加的盒子里,这样n个盒子的组合球数就是我们要求的,所以题目等价于m个球放入n+1个盒子中,盒子有里球数可以为0,添元素插板法,每一个盒子都增加一个球,即m+n+1个球放入n+1个盒子,c(m+n,n)为答案。

    参考链接:http://www.360doc.com/content/18/1010/18/5315_793617654.shtml

  • 相关阅读:
    c# 获取iis地址
    c# 导入导出Excel
    ffmpeg 转成MP3采样率8000
    c# 百度api语音识别
    c# 文件转换成base64
    js截取文件的名称
    js checkbox获取选中的值
    js base64位和c# Base64位转换
    笨方法学Python——习题16
    Python学习问题
  • 原文地址:https://www.cnblogs.com/lfri/p/10439510.html
Copyright © 2011-2022 走看看