zoukankan      html  css  js  c++  java
  • 隔板法总结

      关于组合数的一类知识 其实就那么多关键是 计数问题如何解决,这里是计数问题常用模型 隔板法。

    隔板法 具体的 指将 n个数字分成m组的方案数 这看起来很难计数 有一个想法是 每个数字都有m个选择 答案为m^n 可是有重复除以n!也没有什么具体的含义所以不能这么搞。

    观察到这些球并不是互异的。众所周知 组合数是不讲究互异的 所以考虑转换到组合数的模型。我们知道m组中数字个数加起来为n。

    引例:

    抽象出来模型n个球放一排往里面放m-1个板就可以完成这个问题了 且 不讲究互异。但是考虑我们只能在空隙中放板所以 是C(n-1,m-1).

    但是考虑我们每一组分到的球数都是>=1的 所以当题目说可以为0的时候我们还需做一个操作我们把每组中放一个球的情况看成放了0个球这样依次的递减 我们只需要再多出n个球就好了,这样保证了每一组中都至少有了一个球,当然如果是一个球的话那么其实是0个球。

    这里 就引出了我们隔板法的定义:在n个元素中n-1个空插入k个板 将其分成k+1组的方法。

    应用隔板法d的三个必要条件:1 n个元素必须不互异 2 所分成的每一组都必须要有1个元素 3 分成的组别彼此相异。

    接下来介绍几种变形吧...

    添元素隔板法。上述引例其实就是一个这种方法的应用。

    1   那么 更换问题 10个相同的小球放入3个不同的箱子 第一个箱子至少一个 第二个箱子至少三个个 第三个箱子可以不放 有多少种情况...还简单么...

    当然 因为小球的相同的 我们可以直接钦定先把1个球放第一个箱子 三个球放第二个箱子里 那么 7个球放到三个箱子里且每个箱子可以不放球 这样我们成功转换到上述模型了...

    但是 这样做还是绕了一圈 因为我们最终还是转换成了正整数解,不如直接向正整数解进行转换 考虑我们从第二个箱子钦定放两个 最后一个箱子我们手动的加球表示让第三个箱子至少有1个球 的时候表示为0个球2个球的时候表示1个球...即可。

    为什么正确...证明1 发现两种做法的到的式子相同故正确,证明2 我们始终定义第三个箱子有球的话就是球数-1 这样也能证明是正确的。

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

    显然我们直接钦定放就行了 反正球是相同的。关于正确性的证明可以从答案的存在性证明。

    3  一类自然数从第三个数字开始每个数字都等于其前面两个数字之和 直至不能写为止 求这种数字有多少个?
    显然我们从没10到100开始爆搜 直接搜方案数即可,但是能利用我们上述的隔板法解决此问题么?我刚才手动算了一下发现是45个 这也意味着不需要for 但是我想让我们利用隔板法解决这个问题...

    显然一个数字从前两位固定 那么整个数字就固定了我们只需要统计合法的前两位即可。设第一位为a 第二位为b 那么则有 a+b<=9 且a>0 这个时候我们把<=换成==就是上面的模型了...可惜并不能。

    我们发现b可以为0 那么先补球让b>0 也就是a+b<=10 a b都为正整数 考虑<如何处理也就是这10个球不一定全部放入a和b我们每次把没放入a b 的球都放到c就好了 那么有 a+b+c==10 但是还有可能放完 c为空所以我们再次钦定c>0 那么结果就是

    11个球放入三个箱子之中 C(10,2) ==45;非常的巧妙利用不断转换的原理。

    添板插板法。还是上述例题,具体的我们让 就是添加了 c这个板 然后再进行插板 上述过程就是这个了 不过和添元素集合在了一起。

    选板法。有10粒糖,如果每天至少吃一粒(多不限),吃完为止,求有多少种不同吃法?看起来很难解决的问题我们利用选板法。

    首先必要的 我们有9个板如果都放的话说明10天每天一粒,但是每个板可以选择放或者不放 所以是2^9=512 两个板之间的糖定义为前一个板的那一天吃的。这样完美的转换了问题且不重不漏。

    当然 还有一种证明我们先把9个板放上去 发现每天一粒 如果哪一天我多吃了 说明最后一天是没有的...那最后一天不吃就是9种 倒数第二天是8种 ...这样做显然出错 因为有重复的了...

    但其实我们画一张图观察一下 上面的方法显然正确。

    分类插板法。小梅有15块糖,如果每天至少吃3块,吃完为止,那么共有多少种不同的吃法?

    这个和上面的选板法非常的相似可是我们不能保证每天都吃三块 直接钦定 也不行我们不知道天数不能钦定...

    我们可以分类讨论一下 最多吃5天 最少吃1天 那么 这两种方案都是1,当吃2天的时候 钦定...C(10,1)=10 吃三天的时候 钦定...C(8,2)=28.吃4天 钦定..C(6,3)=20

    综上有60种。

    逐步插板法。在一张节目单中原有6个节目,若保持这些节目相对次序不变,再添加3个节目,共有几种情况?

    我们可以逐步插入 插入第一个板的时候空隙7个 C(7,1)第二个继续C(8,1)第三个C(9,1) 相乘得 504;因为 我们添加的三个元素互异 所以不能一起插入需要逐步的插入。

    到这里 基本上隔板法 的所有模型就结束了 熟记方法 数数的时候好数/cy

  • 相关阅读:
    今天上传公司服务器出现的.net framework版本错误问题
    浮动后父容器高度自适应
    asp net 编程问题 实现下一篇 和上一篇效果
    注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内
    SqlDbHelper备份,做项目时方便应用(目前不太全,把自己项目中的逐渐转移过来)
    域名状态,域名查询看是否被注册
    关于403 由于扩展配置问题而无法提供您请求的页面的问题
    让qq图标在自己的网站上显示方法
    Tomcat基于虚拟路径的发布和web.xml配置
    Tomcat虚拟目录配置方法及原理
  • 原文地址:https://www.cnblogs.com/chdy/p/11490963.html
Copyright © 2011-2022 走看看