DP
- 对于拆分为 < = n <=\sqrt n <=n部分,直接背包,对于 > n >\sqrt n >n的部分由于最多只有 n \sqrt n n个,因此可以记 f [ i ] [ j ] f[i][j] f[i][j]表示用了 i i i个数,当前总和为 j j j,转移 f [ i ] [ j ] = f [ i − 1 ] [ j − n ] + f [ i ] [ j − i ] f[i][j]=f[i-1][j-\sqrt n]+f[i][j-i] f[i][j]=f[i−1][j−n]+f[i][j−i],之后合并即可。
五边形数
- 有 ϕ ( x ) = ∏ ( 1 + x i ) = 1 + ∑ i > 0 ( − 1 ) i ( x i ( 3 i − 1 ) / 2 + x i ( 3 i + 1 ) / 2 ) \phi(x)=\prod (1+x^i)=1+\sum_{i>0}(-1)^i(x^{i(3i-1)/2}+x^{i(3i+1)/2}) ϕ(x)=∏(1+xi)=1+∑i>0(−1)i(xi(3i−1)/2+xi(3i+1)/2),答案的生成函数为 1 ϕ ( x ) \frac{1}{\phi(x)} ϕ(x)1,因此可以直接暴力求逆,复杂度 n n n\sqrt n nn,如果用多项式求逆就可以做到 n l o g n n\ log\ n n log n.
F图
- 即将拆分方案的数写成一个阶梯,考虑阶梯角的最大正方形的边长为 h h h,那么剩下两边分为两个子阶梯,直接枚举 h h h,那么方案数就是 ∑ h ( ∏ i = 1 h 1 ( 1 − x i ) ) 2 \sum_h(\prod_{i=1}^h\frac{1}{(1-x^i)})^2 ∑h(∏i=1h(1−xi)1)2, h h h是 n \sqrt n n级别的,每一次乘上两个 1 1 − x h \frac{1}{1-x^h} 1−xh1即可。
Exp
- 虑 l n ( 1 1 − x k ) = ∑ i ≥ 1 x i k i ln(\frac{1}{1-x^k})=\sum_{i\ge1}\frac{x^{ik}}{i} ln(1−xk1)=∑i≥1ixik(求导推知),那么 l n ( A n s ( x ) ) = ∑ k l n ( 1 1 − x k ) ln(Ans(x))=\sum_kln(\frac{1}{1-x^k}) ln(Ans(x))=∑kln(1−xk1),对于每一个 k k k有值的只有 n / k n/k n/k项,暴力求出 l n ( A n s ( x ) ) ln(Ans(x)) ln(Ans(x))之后直接exp即可。