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}\)
方案数能计算出来, 想办法也可以计算出和
善于猜状态, 宝能做的