Loading

MEXimize the Score

算法

首先观察对于一个确定的数组 \(x\) , 怎么去计算这样的答案

对于每一个值 \(u\) , 假设其出现次数为 \(Ap_u\) , 那么最多产生的贡献就为 \(\displaystyle\min_{v \leq u} Ap_v\) , 原因是显而易见的

那么怎么对于每一个子串串都计算答案呢, 我们考虑串串之间的共同点, 对于每一个值, 我们只是取的个数发生了改变, 本质上没有变化, 联想到 这道题\(\rm{trick}\) , 我们考虑用值来递推答案

\(dp_{i, j}\) 表示考虑到值 \(i\) , 其中 \(\displaystyle\min_{v \leq i} Ap_v = j\) 时的方案数, 那么可以推出柿子

\[dp_{i, j} = \sum_{k \geq j} dp_{i - 1, j} \cdot {Ap_i \choose k} + \sum_{k > j} dp_{i - 1, k} \cdot {Ap_i \choose j} \]

初始化令 \(dp_{0, j} = {Ap_0 \choose j}\)

前缀和优化 + \(j\) 的总和是 \(\mathcal{O} (n)\) 的, 所以线性

答案比较特殊, 当之后的数字没有考虑到的时候, 他是不影响当前的方案的, 所以后面任意选择, 即为

\[\sum dp_{i, j} \cdot 2 ^ {\sum_{i < u < n} Ap_u} \cdot j \]

实现

框架

先预处理所有需要的数学柿子, 然后递推计算即可

代码

代码不想写了, 注意预处理 \(inv\) 数组

总结

善于总结结论

善于利用共同点优化算法, 属于一种 \(\rm{trick}\)

方案数能计算出来, 想办法也可以计算出和

善于猜状态, 宝能做的

posted @ 2024-12-09 12:56  Yorg  阅读(3)  评论(0编辑  收藏  举报