1 条题解
-
0
D. 洪水填充 详细题解
题目核心理解
给定一行 个带颜色的方格,同一种颜色的连续一段称为一个连通块。 游戏规则如下:
- 一开始任选一个起点方格(不计操作次数)。
- 每一步可以把起点所在连通块整体染成任意其他颜色。
求把整行方格变成同一种颜色所需的最少操作次数。
数据范围:
核心思路
1. 关键性质
- 连续相同颜色不影响答案,可以先去重压缩,得到相邻颜色互不相同的新数组。
- 最优策略等价于:从某个中心开始,用最少步数向左右“吞并”相邻区块。
- 若压缩后长度为 ,则最多需要 步;能匹配到的相同颜色越多,步数越少。
2. 区间 DP 定义
设压缩后数组为 。 定义 为:把区间 染成同一种颜色的最少操作次数。
3. 转移规则
- 若 : 右端点可以直接被左侧区间“带成同色”,因此
- 若 : 只能从左边或右边扩展一步,因此
算法流程
- 读入颜色数组,压缩连续相同颜色,得到新数组 ,长度为 。
- 初始化:,单个格子不需要操作。
- 按区间长度从小到大枚举 ,再枚举左端点 ,算出右端点 。
- 按上述转移式计算 。
- 最终答案为 。
公式与复杂度分析
核心转移:
$$dp[l][r] = \begin{cases} dp[l][r-1], & a[l]=a[r] \\ \min(dp[l+1][r], dp[l][r-1])+1, & a[l]\neq a[r] \end{cases} $$复杂度
- 时间复杂度:
- 空间复杂度:
可在 范围内稳定运行,完全满足题目限制。
- 1
信息
- ID
- 6597
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者