数学2

OGF

\[A=\sum_{0\le n}a_nx^n \]

关于背包问题的另类解法

01背包

\(g_i\) 表示背包体积为 \(i\) 的方案数,其生成函数为 \(G(x)=\sum_{0\le i} g_ix^i\)

对于一个新增的体积为 \(v\) 的物体,有 \(g_i\leftarrow g_{i-v}\) 的转移,其生成函数的刻画也就是 \(G\times (x^v+1)\)

完全背包

对于一个新增的体积为 \(v\) 的物体,\(g\) 的转移是连续的,也就是应刻画为 \(G \times \sum_{0\le i} x^{iv}\),注意到这是等比求和,所以就是 \(G\times \frac{1}{1-x^v}\)


例题:有体积1和2的物体分别 \(1\le n,m\le 10^6\) 个,求凑出 \(k\le 10^9\) 的方案数。

注意到答案为 \([x^k]\frac{1}{(1-x)^n(1-x^2)^m}\)

方法一:

\[\frac{1}{(1-x)^n(1-x^2)^m}=\frac{1}{(1-x)^{n+m}(1-x)^n} \]

通过部分分式分解能得到:

\[\sum_{i=1}^{n+m}\frac{A_i}{(1-x)^i}+\sum_{i=1}^{m}\frac{B_i}{(1+x)^i} \]

然后再拆分算第 \(k\) 项贡献。

方法二:

\[\frac{1}{(1-x)^n(1-x^2)^m}=\frac{(1+x)^n}{(1-x^2)^{n+m}} \]

枚举体积1中选奇数,然后直接做。

EGF

对于一个数列 \(<f_n>\) ,其指数型生成函数\((EGF)\) \(F_n=\sum_{0\le n}\frac{f_n}{n!}x^n\)

注意到其中的 \(\frac{1}{n!}\) 这一项,在计算组合数的时候,往往会用到阶乘,那么可以发现两个多项式的二项式卷积结果的 \(EGF\),为它们的 \(EGF\) 卷积。

(以下记对应字母的大写为它的 \(EGF\) )

\[c_n=\sum_{i=0}^n \binom{n}{i}a_ib_{n-i}\\ \frac{c_n}{n!}=\sum_{i=0}^n \frac{a_i}{i!} \frac{b_{n-i}}{(n-i)!}\\ C_n=\sum_{i=0}^n A_iB_{n-i}\\ C=A\times B \]

如此便能解决一些分成两组,且方案数不同的问题,如n个点构成一个环和一颗树的方案数

EGF的exp与ln

exp我们用它的泰勒展开式:

\[exp(f)=\sum_{0\le n}\frac{1}{n!} f^n \]

首先它和 \(EGF\) 一样有阶乘,这肯定是用于组合数的计算,此外,它还多了一个 \(f^n\)\(exp\)干的事情就是在知晓一组方案的生成函数时,可以知道它分成若干组的方案。

ln我们不需要借用它的泰勒展开式与组合意义,只需要用它是exp的反函数即可。

首先,我们尝试构建这个 \(EGF 的exp\) 的状物:

\[令G=exp(F),F=ln(G)\\ G=\sum_{0\le n}\frac{1}{n!} F^n\\ [x^n]G=\sum_{0\le i\le n}\frac{1}{i}[x^n]F^i\\ [x^n]G=\sum_{0\le i\le n}\frac{1}{i}\sum_{k_1+k_2+...+k_i=n}\frac{1}{\Pi_{1\le j\le i} k_j!}\Pi_{1\le j\le i} f_j!\\ g_n=\sum_{0\le i\le n}\frac{1}{i}\sum_{k_1+k_2+...+k_i=n}\frac{n!}{\Pi_{1\le j\le i} k_j!}\Pi_{1\le j\le i} f_j! \]

posted @ 2025-12-31 11:00  liduoduo2021  阅读(7)  评论(0)    收藏  举报