P4389 付公主的背包
非常好的 \(exp\) 优化背包
首先背包不可优化。
考虑先求出 \(\ln (\prod_{i=1}^{n} 1 - x^{p_i})\),再 \(exp\) 还原多项式即可。
又可知上述式子可被化为 $\sum_{i=1}^{n} \ln (1-x^{p_i}) $,然后就是一个很妙但好像很典的东西:
\[\ln (1-x) = \sum_{i=1} \frac{x^i}{i}
\]
如何得到?
设 \(F(x) = \ln (1-x)\),考虑求出 \(F(1)(x) = (1-x)^{-1}\),\(F(2)(x) = (1-x)^{-2}\),\(F(3)(x) = 2(1-x)^{-3}\)。
所以 \(F(k)(x) = (k-1)!(1-x)^{-k}\)
在 \(0\) 点处泰勒展开:
\[\sum_{i=0} \frac{F(i)(0)}{i!} =0 + \sum_{i=1} \frac{(i-1)!1^{-i} x^i}{i!} = \sum_{i=1} \frac{x^i}{i}
\]
对于 \(\ln (1-x^{y})\) 同理,可得 \(\ln (1-x) =\sum_{i=1} \frac{x^{iy}}{i}\)。
所以相当于对 \(y\) 的倍数(\(iy\))加上 \(\frac{1}{i}\),这个直接调和级数,复杂度是 \(O(nlogn)\)。
然后套个 \(exp\) 板子即可。