P2943 Cleaning Up G 题解

P2943 Cleaning Up G

题目链接

Solution

\(f(i)\) 为前 \(i\) 头牛的最小代价,显然有

\[ f(i)=\min_{j=1}^i\{ f(j-1)+w(j,i) \} \]

\(w(l,r)\)\([l,r]\) 中颜色数的平方,也就是

\[ w(l,r)=\left( \sum_{i=l}^r[suf(i)>r] \right)^2 \]

边界:\(f(0)=0,f(i)=\inf\)

显然是 \(O(n^2)\)

试图找决策单调性规律无果

发现答案不超过 \(n\),因为可以每个人单独一段

此时若一段颜色数超过了 \(\sqrt n\) 就剪枝掉了

于是就可以 \(O(n\sqrt n\log n)\)

如何去掉 \(\log\)

我们需要预处理出 \(g(i,j)\) 表示最左的位置 \(pos\) 使得 \([pos..i]\) 中的颜色数 \(=j\).

发现它有很多单调性啊,这里举两个例子:

根据颜色数的式子,观察出 \(g(i,j)\le g(i-1,j-1)\)

于是转化为 \(O(n)\) 条斜线,每条线的决策点单调递减

一条条线地计算,每次计算都开一个 \(suf\) 的桶即可,是 \(O(n\sqrt n)\)

另一种思路是:

发现 \(g(i,j)\) 随着 \(i\) 的增加,单调不降

于是维护一个指针、一个桶即可

题目还行,数据有点水...

posted @ 2024-07-30 22:03  Laijinyi  阅读(15)  评论(0编辑  收藏  举报