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)\),注意取模。

posted @ 2025-10-16 09:35  Uesugi1  阅读(9)  评论(0)    收藏  举报