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))

  • 相关阅读:
    背水一战 Windows 10 (61)
    背水一战 Windows 10 (60)
    背水一战 Windows 10 (59)
    背水一战 Windows 10 (58)
    背水一战 Windows 10 (57)
    背水一战 Windows 10 (56)
    背水一战 Windows 10 (55)
    背水一战 Windows 10 (54)
    背水一战 Windows 10 (53)
    背水一战 Windows 10 (52)
  • 原文地址:https://www.cnblogs.com/peanuttang/p/14417964.html
Copyright © 2011-2022 走看看