P4389 付公主的揹包

~Cyan~發表於2024-12-04

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

相關文章