P11233 [CSP-S 2024] 染色 题解

我们设 \(dp_{x,y}\) 表示上一个红色是 \(x\),上一个蓝色是 \(y\) 时最大的价值。

容易发现转移为 \(dp_{a_i,x}=\max\limits_{j=1}^k dp_{k,x}+[k=a_i]a_i,dp_{x,a_i}=\max\limits_{j=1}^k dp_{x,k}+[k=a_i]a_i\)。其中 \(k\) 是值域。

容易发现,转移完后的 \(dp\) 数组中有值的位置是一个十字架(如下图)。

我们考虑直接维护十字架上的值并对其进行转移。

考虑若 \(a_i=a_{i-1}\),相当于全局加上 \(a_i\),打一个标记即可。

\(a_i\not=a_{i-1}\),记 \(las=a_i,f_{i,x}=dp_{a_i,x},g_{i,x}=dp_{x,a_i}\)

容易发现转移:

\[\begin{array}{c} f_{i,x}&=&f_{i-1,x}\\ f_{i,las}&=&\max(g_{i-1,a_i}+a_i,maxg)\\ g_{i,x}&=&g_{i-1,x}\\ g_{i,las}&=&\max(f_{i-1,a_i}+a_i,maxf)\\ f_{i,a_i}=g_{i,a_i}&=&\max(f_{i,a_i},g_{i,a_i}) \end{array} \]

直接维护即可,复杂度 \(O(T(n+V))\)

posted @ 2024-12-03 19:56  Grisses  阅读(118)  评论(0)    收藏  举报
Document