非常好的 \(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\) 板子即可。