Loading

[ABC 400] F. Happy Birthday! 3

前言

先看题解后做题并不是很好的做法
不过这个类型的问题好像挺好像的, 这下这下了

注意到训练时间过半, 注意到最终需要稳切蓝?

思路

环形, 区间涂色, 区间涂成颜色 \(x\) 花费 \(len + C_x\) 元, 求涂成指定情况的最小花费

涂色问题, \(a \to b\), 不难想到逆向思维
也就是如何把指定情况涂成 \(0\)
于是题目变成

环形, 区间涂色, 区间涂成颜色 \(x\) 花费 \(len + C_x\) 元, 要求区间颜色全等, 求涂成指定情况的最小花费

需要注意的是, 上面的逆向思维没有任何作用


考虑把环上问题转化为链上问题
简单来讲可以破环为链

考虑其正确性, 也就是是否一定存在两相邻点使得它们没有同时被一次区间操作涂色过
这个自己画一下是显然的, 调整一下就行


\(f_{i, j}\) 表示将区间 \([i, j]\) 染成目标颜色的最小代价

第一种转移肯定是合并, 即 \(f_{i,j} = f_{i,k} + f_{k+1,j}\)
第二种就是在一次染色中顺便把右一个端点给染了, 即 \(f_{i,j} = f_{i,k} + f_{k+1,j-1} + j - k\), 条件是 \(c_j = c_k\)

详细解释

这里的转移为什么是 fi,k+fk+1,j1f_{i,k} + f_{k+1,j-1} 而不是 fi,j1f_{i,j-1} 呢?
因为你在给 [k,j][k, j] 染色的时候, 在 [i,k][i, k][k+1,j1][k+1, j-1] 中不能有跨区间的染色, 不然就会产生覆盖, 优先级无法保证。

第三种就是在一次染色中顺便把左一个端点给染了, 即 \(f_{i,j} = f_{i+1,k-1} + f_{k,j} + k - i\), 条件是 \(c_i = c_k\)

总结

一类比较特殊的区间问题
一般来讲的解决方法:

  • 直接枚举断点
  • 枚举断点, 将其中一段延伸到当前端点
posted @ 2025-04-09 15:30  Yorg  阅读(22)  评论(0)    收藏  举报