被这玩意卡了一上午——前天CSP-S模拟的T4需要用到这类问题的转移。为什么题解TMD是错的?
即g(i,j,k)表示“每个位置有i类元素可选,且序列中必须包含指定的j类元素的,长度为k的序列的个数”。形式化地讲,我们需要统计满足以下条件的序列的个数:∀p∈[1,k],ap∈S (∣S∣=i);∀b∈T⊆S (∣T∣=j),∃p∈[1,k],ap=b。
通过容斥原理,我们可以计算出至少有0,1,2,…,j个T中的元素没有被包含在序列中的序列的个数,然后乘上容斥系数累加既是答案。也即:
g(i,j,k)=x=0∑j(−1)x(xj)(i−x)k。通俗地讲,我们在 j 个元素中选择 x 个,并强制使得它们不出现在序列中,其余元素任选。除去组合数的预处理时间,复杂度为O(j)。参阅AtCoder ABC 194 F – Digits Paradise in Hexadecimal,可以使用上述计算而非DP求解(虽然DP更加简洁直观)。
(更多…)