1 条题解
-
0
题意
我们有一条链状的铁路系统,连接 个城市。有 天的旅行,每天从一个城市移动到相邻城市。
对于每条铁路 (连接城市 和 ),我们有三种价格:
- :纸质票单次价格
- :IC 卡单次价格()
- :购买 IC 卡的成本
目标:选择购买哪些铁路的 IC 卡,使得总花费(购卡费 + 乘车费)最小。
关键观察
1. 决策独立性
各条铁路的 IC 卡购买决策是相互独立的,因为:
- 不同铁路的 IC 卡不能通用
- 总花费是各铁路花费的简单求和
2. 费用比较模型
对于铁路 ,设它被经过的次数为 :
- 不买 IC 卡:总花费 =
- 买 IC 卡:总花费 =
最优决策是取两者中的较小值。
3. 核心问题转化
问题转化为:
- 计算每条铁路被经过的次数
- 对每条铁路独立进行费用比较
算法步骤
步骤 1:计算每条铁路的经过次数
由于铁路是链状结构,从城市 到 的路径是唯一的。
使用差分数组技巧:
- 初始化差分数组
diff[1..N] = 0 - 对于每个行程段 :
- 设 ,
- 这表示要经过铁路
- 在差分数组上:
diff[l] += 1,diff[r] -= 1
- 最后对差分数组求前缀和得到
步骤 2:计算最小总花费
对于 到 :
- $cost_i = \min(A_i \times cnt_i, C_i + B_i \times cnt_i)$
- 总花费
复杂度分析
- 步骤 1:
- 每个行程段处理
- 前缀和计算
- 步骤 2:
- 总复杂度:,适合
正确性证明
贪心选择的正确性
对于铁路 ,两种方案的费用函数:
- (线性函数,斜率为 )
- (线性函数,斜率为 )
由于 ,存在一个临界点:
- 当 较小时,
- 当 较大时,
临界点 满足:
但实际上我们不需要计算临界点,直接比较两种方案的总花费即可。
总结
这道题的关键在于:
- 识别决策独立性:各铁路独立选择是否买卡
- 使用差分数组:高效统计经过次数
- 简单费用比较:对每条铁路选择最优方案
算法简洁高效,时间复杂度 ,能够处理大规模数据。
- 1
信息
- ID
- 3843
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者