1 条题解
-
0
题目大意
有 个营员,身高分别为 到 ,站在 级台阶上。初始时第 级台阶上站着身高为 的营员。
要求通过交换相邻台阶上的营员,使得对于所有 (),满足:
其中 是第 级台阶上营员的最终身高。
求最小的交换次数。
算法思路
关键观察
满足条件的排列具有特殊的结构:最终排列由若干个连续递减的段拼接而成,且段首递增。
例如: 是合法的,包含段 和 。
动态规划解法
设 表示将身高 到 的营员安排好的最小交换次数。
状态转移:
$$f[i] = \min_{0 \le j < i} \{ f[j] + \text{cost}(j+1, i) \} $$其中 表示将身高 到 的营员作为一个连续递减段放置所需的交换次数。
代价计算
代价由两部分组成:
- 外部逆序:当前段 与已安排段 之间的逆序对数量
- 内部逆序:当前段内部按目标顺序排列所需的逆序对数量
通过预处理二维前缀和数组,可以在 时间内计算任意段的代价。
复杂度分析
- 时间复杂度:
- 空间复杂度:
总结
本题的核心在于发现最终排列的段结构性质,然后通过动态规划枚举所有可能的段划分。利用前缀和技巧快速计算逆序对数量,将复杂度优化到 ,能够处理 的数据规模。
- 1
信息
- ID
- 3104
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者