P10115 [LMXOI Round 1] Placer

Posted on 2025-04-18 23:04  K_J_M  阅读(17)  评论(0)    收藏  举报

刚刚 A 了这道题,作为蒟蒻的我来写一篇题解加深一下印象。首先,题目意思是给你一个字符串和一个序列 \(a\),问最大的美丽值。美丽值是由一段一段的价值累计得到的,而这个价值定义为:

\[w(l,r)= \begin{cases} a_r-a_l, & S_{l\dots r} \text{为合法括号序列}\\ \ 0 & \text{otherwise}\\ \end{cases}\]

定义:

\[dp_i=\max_{1≤j≤k,1≤pos_j<i}\{w(1,pos_1)+w(pos_1+1,pos_2)+\dots +w(pos_k+1,i)\} \]

那么 \(dp_i\) 应该从前面的地方 \(j\) 转移过来(并且是最大的美丽值的地方),

\[dp_i=\max\{dp_j+w(j+1,i)\} \]

那么这又可以分为两种情况

\[dp_i= \begin{cases} \max\{dp_j+a_i-a_{j+1}\} &S_{j+1\dots i} \text{为合法括号序列}\\ \max\{dp_j\} & \text{otherwise} \end{cases}\]

同时又注意到 \(dp_i\) 的值应该是单调不减的,所以我们的\(\max\{dp_j\}=dp_{i-1}\),又可以改为 \(dp_i=dp_{i-1}\)。综上,我们的方程为

\[dp_i= \begin{cases} \max\{dp_j+a_i-a_{j+1}\} &S_{j+1\dots i} \text{为合法括号序列}\\ dp_{i-1} & \text{otherwise} \end{cases}\]

但是这样子做的话,时间复杂度为 \(O(n^2)\),妥妥的超时,现在考虑优化。注意到方程中 \(dp_j+a_j-a_{j+1}\)\(a_i\) 对于计算 \(dp_i\) 而言是一个常量,可以提取出来,于是又变成了

\[dp_i=\max\{dp_j-a_{j+1}\}+a_i \]

现在我们令

\[c_i=\max\{dp_j-a_{j+1}\} \]

那么我们的方程又可以转化为

\[dp_i= \begin{cases} c_i+a_i &S_{j+\dots i} \text{为合法括号序列}\\ dp_{i-1} & \text{otherwise}\\ \end{cases}\]

这个的时间复杂度为 \(O(n)\),绰绰有余。那么现在的问题又转移到了求解\(c_i\)。考虑到

\[c_i=\max\{dp_i-a_i\} \]

我们记 \(pre_i\) 表示

\[\max_{j<i,S_{j\dots i}\text{为合法括号序列}}^{}\{j\} \]

那么

\[c_i= \begin{cases} \max(c_{pre_i-1},dp_{pre_i-1}-a_{pre_i}) &pre_i >0\\ -∞ &pre_i=0\\ \end{cases} \]

这个处理也是 \(O(n)\) 的,也就是我们可以 \(O(n)\) 完成转移了。至于处理 \(pre_i\) 的方法考虑使用,具体见代码。
Ac Code