zoukankan      html  css  js  c++  java
  • [联合省选 2020A]组合数问题 题解

    前言

    这题算是我斯特林数的入门题,顺便安利大佬的博客,我是从这篇博客中学的斯特林数。

    前置知识:

    • 二项式定理

      [(a+b)^n=sum_{i=0}^n{dbinom ni a^ib^{n-i}} ag1 ]

    • 斯特林数相关知识

      • 斯特林数定义

        • 第一类斯特林数: 第一类斯特林数 (egin{bmatrix}n\mend{bmatrix}) 表示将 (n) 个不同元素划分为 (m) 个轮换的方案数。

        • 第二类斯特林数: 第二类斯特林数 (egin{Bmatrix}n\mend{Bmatrix}) 表示把 (n) 个不同小球放入 (m) 个相同盒子,盒子不能空的方案数。

        • 相关递推式

          [egin{bmatrix}n\mend{bmatrix}=egin{bmatrix}n-1\m-1end{bmatrix}+(n-1)egin{bmatrix}n-1\mend{bmatrix} ag2 ]

          [egin{Bmatrix}n\mend{Bmatrix}=egin{Bmatrix}n-1\m-1end{Bmatrix}+megin{Bmatrix}n-1\mend{Bmatrix} ag3 ]

    • 上升下降幂相关知识

      • 定义(a^{ar{b}}=prod_{i=0}^{b-1}{(a+i)}) 称为上升幂,(a^{underline{b}}=prod_{i=0}^{b-1}{(a-i)}) 称为下降幂,而 (a^b) 称为普通幂。

      • 普通幂与上升下降幂之间的转换

        [x^n=sum_{k=0}^n{egin{Bmatrix}n\kend{Bmatrix}x^{underline{k}}} ag4 ]

        [x^{underline{n}}=sum_{k=0}^n{(-1)^{n-k}egin{bmatrix}n\kend{bmatrix}x^k} ag5 ]

        [x^n=sum_{k=0}^n{(-1)^{n-k}egin{Bmatrix}n\kend{Bmatrix}x^{ar{k}}} ag6 ]

        [x^{ar{k}}=sum_{k=0}^n{egin{bmatrix}n\kend{bmatrix}x^k} ag7 ]

      • 下降幂与组合数之间的关系

        [dbinom nm m^{underline{k}}=dbinom {n-k}{m-k}n^{underline{k}} ag 8 ]

    题解

    [egin{aligned}sum_{k=0}^n f(k) imes x^k imes dbinom n k&=sum_{k=0}^n{left(sum_{i=0}^m{a_ik^i} ight)x^kdbinom nk} exttt{$ig($由定义$ig)$}\ & = sum_{k=0}^n{left(sum_{i=0}^m{a_isum_{j=0}^i{egin{Bmatrix}i\jend{Bmatrix}k^{underline{j}}}} ight) x^kdbinom nk} exttt{$ig($由$\,(4)ig)$}\&=sum_{k=0}^n{left(sum_{j=0}^m{k^{underline{j}}sum_{i=0}^j{a_iegin{Bmatrix}i\jend{Bmatrix}}} ight)x^kdbinom nk} exttt{$ig($交换求和顺序$ig)$}\&=sum_{j=0}^m{q_j}sum_{k=j}^n{x^kk^{underline{j}}dbinom nk} exttt{$igg($记$\,q_j=sum_{i=0}^j{a_i}egin{Bmatrix}i\jend{Bmatrix}igg)$}\&=sum_{j=0}^m{q_jsum_{k=j}^n{x^k}n^{underline{j}}dbinom {n-j}{k-j}} exttt{$ig($由$\,(8)ig)$}\&=sum_{j=0}^m{q_jx^{j}n^{underline{j}}sum_{k=0}^{n-j}{x^kdbinom {n-j}{k}}} exttt{$ig($提取公因式$ig)$}\&=sum_{j=0}^m{q_jx^jn^{underline{j}}(x+1)^{n-j}} exttt{$ig($由$(1)ig)$} end{aligned} ]

    显然 ({q_j}) 可以在 (O(m^2)) 的时间内预处理出来,剩下的直接套上面的式子就可以 (O(mlog n)) 计算。

    时间复杂度为 (O(m^2+mlog n)),空间复杂度为 (O(m^2))

  • 相关阅读:
    004 使用文本编辑器
    003 第一个Python程序
    002 Python解释器
    001 安装Python
    000 Python教程
    001 Java环境变量配置
    002 基础语法1
    003 基础语法2
    dede首页调用会员积分和头像代码
    DEDE 会员调用方法
  • 原文地址:https://www.cnblogs.com/peanuttang/p/14417964.html
Copyright © 2011-2022 走看看