Luogu4389 付公主的背包

Luogu4389 付公主的背包

生成函数

对于一个物品,建立生成函数:

\[ \sum_{i=0}^{\infty} x^{iv}\\ =\frac{1}{1-x^v} \]

把\(n\)个多项式乘起来,时间复杂度显然不太行。

考虑先把多项式进行\(\ln\),加起来,再\(\exp\),这就需要我们快速求\(\ln\),\(\ln \frac{1}{1-x^v}=?\)。

设\(G(x)=\ln F(x)=\ln (1-x^v)\)。

\[G'(x)=\frac{F'(x)}{F(x)}\\ =-vx^{v-1}\frac{1}{1-x^v}\\ =-v x^{v-1} \sum_{i=0}^{\infty} x^{iv}\\ =\sum_{i=1}^{\infty} -vx^{iv-1}\\ \int G'(x)=\int \sum_{i=1}^{\infty} -vx^{iv-1}\\ =\sum_{i=1}^{\infty} \int -vx^{iv-1}\\ =-\sum_{i=1}^{\infty} \frac{1}{i} x^{iv}\\ \ln \frac{1}{1-x^v}\\ =\ln 1-\ln (1-x^v)\\ =\sum_{i=1}^{\infty} \frac{1}{i} x^{iv} \]

把\(v\)相同的归为一类,时间复杂度上限为\(\sum_{i=1}^m \frac{m}{i} \approx O(m \log m)\)。

再加上一个\(O(m \log m)\)的多项式\(\exp\),总时间复杂度为\(O(m \log m)\)。

上一篇:「刷题笔记」数学IV


下一篇:动画系列:java代码实现图片缩放动画