1 条题解
-
0
D. 猫头鹰塞拉芬 详细题解
题目核心理解
有 个人排队,基里尔排在最后。 他可以向前插队:
- 若从位置 跳到位置 ,需要支付 给 号人;
- 对中间每一个人 ,需要支付 ;
- 要求最终排进前 个位置; 求最小花费。
核心思路
1. 关键贪心观察
- 对于每个位置 ,只有两种代价: 和 。
- 只要 ,在这里直接用 一定更优,相当于一步跳到这里。
- 否则只能一路付 过去。
- 大于 的位置都必须经过,我们从后往前贪心选最小代价。
- 最后在前 个位置里选一个终点,加上对应 取最小总代价。
2. 步骤拆解
- 从 倒序遍历到 :
- 若 :选 ,累加代价。
- 否则:选 ,累加代价。
- 遍历结束后,剩下只需要在前 个位置选一个终点 。
- 总代价 = 已累加代价 + ,取最小值即为答案。
算法流程
- 读入 ,数组 。
- 从 到 逆序遍历:
sum += min(a[i], b[i])
- 枚举 到 :
ans = min(ans, sum + a[i])
- 输出 。
公式与复杂度分析
最终答案表达式:
$$ans = \min_{1\le f\le m}\left( \sum_{i=m+1}^n \min(a_i,b_i) \;+\; a_f \right) $$复杂度
- 遍历数组两次,均为线性。
- 时间复杂度:
- 空间复杂度: 可轻松通过 、多组数据总和限制。
- 1
信息
- ID
- 6533
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者