1 条题解
-
0
问题分析
我们需要在河流上的 个捕鱼点和 个批发基地之间进行最优决策,最大化净利润。关键约束包括:
- 捕鱼点有位置 和最大捕鱼量
- 批发基地有位置 、最大购买量 和收购价格
- 逆流而上需要燃料费用 卢布/单位距离
- 必须从河口出发并返回河口
核心思路
1. 问题转化与关键观察
重要洞察:由于必须返回河口,整个行程可以看作是从河口出发,访问一系列捕鱼点和批发基地,最终返回河口。最优策略必然是按位置顺序访问这些点。
费用计算:逆流而上的燃料成本只与到达的最远位置有关。如果到达位置 ,总燃料成本为 (往返)。
2. 贪心策略
将捕鱼点和批发基地按位置排序后,从左到右扫描:
- 在当前位置,我们有一定量的鱼可以出售(来自之前捕鱼点的累计产量)
- 我们希望在当前位置卖出尽可能多的高价鱼
- 燃料成本只取决于当前到达的位置
3. 数据结构优化
使用树状数组维护批发基地信息:
- 按价格从低到高建立索引
- 快速查询:给定目标重量,找到对应的价格分界点
- 支持:按价格区间统计总重量和总价值
算法实现
1. 数据预处理
将所有捕鱼点和批发基地按位置排序,统一处理。
2. 扫描过程
从左到右扫描每个点:
- 如果是捕鱼点:增加可用鱼量
produce_sum - 如果是批发基地:将其加入树状数组(按价格索引)
3. 利润计算
在每个位置 :
- 如果可用鱼量足够覆盖所有批发需求:直接卖出所有鱼
- 如果鱼量不足:优先卖出高价鱼,低价鱼可能无法卖出
利润公式:
利润 = 卖鱼收入 - 燃料成本 燃料成本 = p × 当前位置4. 树状数组操作
upd(c, b):在价格 处增加 吨容量get(w):找到重量分界点,使得低价部分的重量刚好为qry(x):查询价格 的所有批发基地的总重量和总价值
复杂度分析
- 排序:
- 扫描过程:,其中 是价格范围
- 总复杂度:
算法总结
本题的解法基于以下几个关键思想:
- 顺序扫描:利用位置有序性,将复杂的最优路径问题转化为线性扫描问题
- 费用分离:将燃料成本与位置解耦,简化优化目标
- 贪心选择:优先卖出高价鱼,确保单位利润最大化
- 数据结构:使用树状数组高效维护价格-重量关系,支持快速查询和更新
核心价值:展示了如何通过问题转化和数据结构优化,将复杂的几何路径问题简化为高效的可计算问题。
- 1
信息
- ID
- 5256
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者