有一个简单的 $O(n^3)$ DP,考虑 $f_{x + 1, k} = \sum_{j = 0}^{x} f_{x, k - j}$,利用前缀和优化即可。
考虑这实际上是 $f_{x + 1}(k) = f_x(k) * \frac {1 - k^{x + 1}}{1 - k}$,于是答案实际上为:
$$[x^k]f(x) = \prod_{i = 1}^n \frac {1 - x^i}{1 - x} $$
接下来的方法来自 EI,大力膜拜,这里稍稍细致展开。
考虑加入哑元 $t$,也就是看似没有用的一个元:
$$f(t) = \prod_{i = 1}^n \frac {1 - x^i t}{1 - x} $$
有一个重要的观察是:
$$f(xt) = \prod_{i = 1}^n \frac {1 - x^{i + 1} t}{1 - x} = f(t) \frac {1 - x^{n + 1} t}{1 - x t} $$
因此有 $(1 - xt) f(xt) = (1 - x^{n + 1}t) f(t)$。
有一个关键的等式:
$$[t^m] f(xt) = x^m [t^m] f(t) $$
考虑 $[t^m] f(t)$ 是由某 $k$ 个 $x^i t$ 选来,现在每一个 $t$ 都多来了一个 $x$,那么自然就多了 $m$ 个 $x$,于是得到了上式。
考虑设 $f_m = [t^m] f(x)$,也就是此时将 $f$ 看作一个关于 $t$ 的多项式,而系数 $f_m$ 实际上一个关于 $x$ 的多项式。
我们在 $(1 - xt) f(xt) = (1 - x^{n + 1}t) f(t)$ 对两边同时取 $[t^m]$,可以得到:
$$\begin{aligned} \\ [t^m] f(xt) - [t^m] xt f(xt) &= [t^m] f(t) - [t^m] x^{n + 1} t f(t) \\ x^m f_m - x \times x^{m - 1} f_{m- 1} &= f_m - x^{n + 1} f_{m - 1} \\ (x^m - 1) f_m &= (x^{n + 1} - x^m) f_{m - 1} \\ f_m &= -x^m \frac {1 - x^{n - m + 1}}{1 - x^m} f_{m - 1} \end{aligned} $$
现在我们考虑如何维护这个函数。
考虑 $\frac 1 {1 - x^m} = \sum_k x^{km}$,实际上是对于 $f_{m - 1}$ 做一个间隔为 $m$ 的前缀和。
考虑 $1 - x^{n - m + 1}$ 就是 $f_m(x) \leftarrow f_m(x) - f_m(x - (n - m + 1)$ 即可。
于是考虑 $g_m = \frac {1 - x^{n - m + 1}}{1 - x^m} g_{m - 1}$,那么
$$f_m = (-1)^m x^{\frac {m \times (m + 1)} 2} g_m $$
$g$ 是好维护的,最终答案为 $\sum [x^k] f_m = \sum [x^{k - \frac {m(m + 1)}{2}}] (-1)^m g_m$,发现当 $m \gt \sqrt k$ 的时候就没有值了,所以只需要维护 $O(\sqrt k)$ 次卷积,每次是 $O(k)$ 的,非常优秀。