题目链接,感觉是计数神题。
原题的模型是每一步可以选择顶部 $k$ 张牌的一个子集 $X_i$(可以为空)放在袋中,求 $m$ 轮之后所有可能的袋子里牌所组成的集合的大小之和。考虑进行转化,只考虑前 $k$ 张牌,每张牌都有一个属性 $t_i \in \{0,1,\cdots,m\}$。若 $t_i = 0$,表示这张牌永远不会被放入袋子中,否则表示这张牌会在第 $t_i$ 轮被放入袋子中。若 $S_j$ 表示第 $j$ 轮后袋子里的数,最后求 $\sum \limits_{i = 1}^m |S_j|$。
设两个模型为 $A,B$,下证明两个模型等价。
证明
$A \to B$\
对于 $\forall i \in [1,k]$,若 $i \in X_j$ 则有 $t_i = j$,否则 $t_i = 0$。$B \to A$\
在进行第 $j$ 步前,所有 $t_i < j$ 的牌都已经放入袋中,总共有 $|\{i \mid t_i < j\}|$ 张。由于放入袋中后会进行补位,也就是说我们并不关心补进来的是哪一张真正的原始牌,当进行第 $j$ 步前,牌堆的前 $k$ 张牌一定存在所有 $t_i = j$ 的牌,也就是说第 $j$ 步删掉 $\{i \mid t_i = j\}$ 是合法操作。
因此可以对每一张牌单独计算贡献。也就是 $\sum \limits_{i = 1}^m |S_j| =\sum \limits_{i = 1}^k \textbf{1}_{t_i > 0} = \sum \limits_{i = 1}^k t_i$
。共有 $k$ 张牌,所有合法的 $\{t_i\}$ 的方案数为 $(m + 1)^k$。强制令 $t_i = j$,则这张牌的贡献为 $(m + 1)^{k - 1}$。由于 $t_i \in \{0,1,\cdots,m\}$,则这张牌出现在集合里的次数为 $(0 + 1 + \cdots + m) \times (m + 1)^{k - 1}$,即 $\frac{m(m + 1)^k}{2}$。再由于 $k$ 张牌等价,所以最后的答案为