排列组合学习笔记之应用在OI

这篇博客是关于组合数学在奥林匹克信息学竞赛(OI)中的应用的学习笔记,主要讲解了插板法及其变式,包括如何解决不同球的组合分配问题,以及相同球分配到多个不允许为空的盒子中的方法。此外,还探讨了在限制条件下,如每个盒子球的个数必须为2的幂次,如何高效求解问题。总结中强调了动态规划(DP)思路在解决这类问题中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容主要是对:
http://www.cnblogs.com/kliner/archive/2012/10/12/CS_PC.html
所做学习笔记。

一、插板法:
引:在n个不同元素中有重复取k个的组合数?
析:原命题<=>x1+x2+x3……xn=k的自然数解数
          <=>x1+x2+x3……xn=n+k的非负整数解数
          <=>n+k个球放入n个不同盒子中,每份不能为空,分法?
    插空法?===>插板法!
    n+k个相同元素排列数为1,其中形成n+k-1个空,分成n份,即等价于在n+k-1个空中插入n-1个隔板:
          =C(n+k-1,n-1)=C(n+k-1,k)
二、变式->第二类斯特林数。
问:n个不同的球,分成m份?
析:考虑DP。
    拿出最后一个球,分类:
        ①让前n-1个放入前m-1份中,让第n个单独放在第m个中;
        ②对于前n-1个放入m份中的每一种放法,第n个都有m种放法。
    f[n][m]=f[n-1][m-1]+f[n-1][m]*m;
重复?
    球不同,不允许为空->不会重复。
三、变式->允许为空?
析:直接递推可能无法避免重复的情况。
    转化?
    设g[n][m]=f[n][1]+f[n][2]+f[n][3]……f[n][m]
四、相同球放到m个盒子,不允许为空?
    数的划分?!
分类?
    n个球放入m个盒子的方法来自——
    ①n-1个球放入m-1个盒子,然后再把一个球放到一个盒子里;
    ②将n-m个球放入m个盒子,然后再每个盒子放一个球。
条件:互为补集,没有遗漏!
五、练:(POJ2229)相同球放到若干个盒子中,每个盒子的球的个数必为2的x次幂。
    范围:n∈N∩[1,10^6]
析:二进制分解->完全背包?O(nlogn)

    O(n)做法?
    奇怪的数的划分?
        f[2*n-1]=f[2*n]!奇数的分法必等于偶数,即对于偶数的每种分法加一个盒子放一个新球。
    那偶数呢?
分类?
    n个球放入若干个盒子的方法来自——
    ①将n-1=n-2个球放入若干个盒子,然后再把1个球放到一个盒子里。
    ②将n/2个球放入若干个盒子,然后再把每个盒子的球数*2。
条件:不重不漏,互为补集。

总结:DP思路?
      将当前量分类,在已知中寻找与当前量值的关系,保证不重不漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值