题解 P7414 【[USACO21FEB] Modern Art 3 G】

· · 题解

P7414 题解

不是,USACO 恶意撞题怎么回事啊/yiw

Description

有一个长度为 n 的初始值均为 0 的序列 a,每次操作可以将其中一个子段统一改成任意值。

现给定一个长度为 n 的目标序列 b,求最少操作几次可以达到这个目标序列。

Solution

考虑设 $f[i][j]$ 表示刷完区间 $[i,j]$ 至少需要多少次。 假设当前决策到 $i,j$,分类讨论: - $b_i \neq b_j$,则考虑枚举一个分段点 $k$,依次转移即可,即: $$f[i][j]=\min\limits_{k=i}^{j-1}f[i][k]+f[k+1][j]$$ - $b_i=b_j$,则容易得到 $f[i][j] \geq f[i+1][j]$,并且观察到 $f[i+1][j]$ 的任意一种方案都会适合 $f[i][j]$,延申一个底盘即可,因此 $f[i][j] \leq f[i+1][j]$。 综上,得到 $f[i][j]=f[i+1][j]$,但是因为左右延申都是可以的,所以 $f[i][j]=\min(f[i+1][j],f[i][j-1])$,即: $$f[i][j]=\min(f[i+1][j],f[i][j-1])$$ 所以通过讨论我们得到了转移方程: $$f[i][j]=\begin{cases}\min\limits_{k=i}^{j-1}f[i][k]+f[k+1][j]&b_i \neq b_j\\\min(f[i+1][j],f[i][j-1])&b_i=b_j\end{cases}$$ 初始化即为 $f[i][j]=\begin{cases}∞&i \neq j\\1&i=j\end{cases}$。 转移即可,复杂度 $\mathcal O(n^3)$。