CF2030E MEXimize the Score
首先考虑转化一下分值,容易发现题目中的 \(\operatorname{MEX}(S_1)\) $ + \operatorname{MEX}(S_2) + \ldots + \operatorname{MEX}(S_k)$ 手玩一下就能发现让分值最大的策略就是每次让 \(\operatorname{MEX}\) 尽量大,所以可以把分值转化为 \(\sum \min\{cnt_i,\min_{j=1}^{i-1}cnt_j\}\),其中 \(cnt_i\) 为数组 \(b\) 中数 \(i\) 的出现次数。
设计朴素的 dp,设 \(f_{i,j},g_{i,j}\) 分别表示第 \(i\) 个数有 \(j\) 个 取到答案中 的所有方案的总和以及方案数,转移:
\[f_{i,j}\to \sum_{k=j+1}^{cnt_{i-1}}f_{i-1,k}+j\cdot g_{i-1,k}\\
g_{i,j}\to \sum_{k=j+1}^{cnt_{i-1}}g_{i-1,k}
\]
其中 \(j=k\) 的情况需要特殊处理因为此时无论取多少个 \(i\),只要个数大于 \(j\),与 \(k\) 取 \(\min\) 后仍然是取 \(j\) 个也要算入 \(f_{i,j}\) 中,也就是 \(f_{i,j}\to (f_{i,j}+f_{i-1,j}+j\cdot g_{i-1,j})\cdot C,g_{i,j}\to g_{i,j}+g_{i-1,j}\cdot C\) 其中 \(C\) 为在 \(cnt_i\) 中任意至少取 \(j\) 个的组合数。
这样是最坏时间复杂度约为 \(O(n^2)\)。
然后发现 \(f,g\) 的转移过程显然能用后缀和优化且 \(g_i\) 为 \(g_{i-1}\) 的后缀和,转移方程转为
\[f_{i,j}\to sf_{cnt_{i-1}}-sf_{j}+j\cdot(sg_{cnt_{i-1}}-sg_{j})\\
g_{i,j}\to sg_{cnt_{i-1}}-sg_{j}
\]
其中 \(sf,sg\) 为 \(f_{i-1},g_{i-1}\) 的前缀和。
因为元素出现次数和为 \(n\),所以这样优化后就是 \(O(n)\),注意取模。

浙公网安备 33010602011771号