luogu4389 付公主的背包
题目链接: 洛谷 题目大意:现在有$n$个物品,每种物品体积为$v_i$,对任意$s\in [1,m]$,求背包恰好装$s$体积的方案数(完全背包问题)。 数据范围:$n,m\leq 10^5$ 这道题,看到数据范围就知道是生成函数。 $$Ans=\prod_{i=1}^n\frac{1}{1-x^{v_i}}$$ 但是这个式子直接乘会tle,我们考虑进行优化。 看见这个连乘的式子,应该是要上$\ln$. $$Ans=\exp(\sum_{i=1}^n\ln(\frac{1}{1-x^{v_i}}))$$ 接下来的问题就是如何快速计算$\ln(\frac{1}{1-x^{v_i}})$。 $$\ln(f(x))=\int f'f^{-1}dx$$ 所以 $$\ln(\frac{1}{1-x^v})=\int\sum_{i=1}^{+\infty}vix^{vi-1}*(1-x^v)dx$$ $$=\int(\sum_{i=1}^{+\infty}vix^{vi-1}-\sum_{i=2}^{+\infty}v(i-1)x^{vi-1})dx$$ $$=\int(\sum_{i=1}^{+\infty}vx^{vi-1})dx$$ $$=\sum_{i=1}^{+\infty}\frac{1}{i}x^{vi}$$ 然后就可以直接代公式了。 1 #include<cstdio> 2