1 条题解
-
0
问题分析
我们有:
- 个仓库环形排列
- 每个仓库初始有 个货物
- 目标:通过相邻搬运使得所有仓库货物数相同
- 要求:最小化搬运量(搬运量 = 搬运的货物总数)
设平均值为: [ \text{avg} = \frac{\sum_{i=1}^n a_i}{n} ] 如果 不是整数,则问题无解(但题目保证有解)。
数学解法(中位数法)
思路
- 计算每个仓库的盈余/缺额:
- 计算前缀和:
- 对前缀和数组排序,取中位数
- 最小搬运量 =
原理
- 环形均分问题可以转化为线性均分问题
- 中位数性质保证总距离最小
- 时间复杂度:
网络流解法
建图方法
虽然数学解法更优,但也可以用最小费用流:
-
源点 向 的仓库连边:
- 容量 = ,费用 =
-
的仓库向汇点 连边:
- 容量 = ,费用 =
-
相邻仓库之间连双向边:
- 容量 = ,费用 = (单位搬运成本)
-
运行最小费用最大流
原理
- 盈余的仓库作为供应点
- 缺额的仓库作为需求点
- 相邻仓库间可以互相搬运,费用为距离1
- 最小费用流会自动找到最优搬运方案
样例验证
输入:
5 17 9 14 16 4计算:
- 总量 =
- 平均值
- 盈余/缺额 :
数学解法: 前缀和 (从 开始):
排序:,中位数 =
搬运量 = $|0-4| + |2-4| + |4-4| + |5-4| + |8-4| = 4+2+0+1+4 = 11$
输出:
11
算法步骤(推荐数学解法)
- 读入 和
- 计算平均值
- 计算
- 计算前缀和
- 排序 ,取中位数
- 输出
复杂度分析
- 数学解法:,最优
- 费用流解法:,较慢但更通用
关键点
- 环形排列通过前缀和中位数处理
- 搬运量只关心货物移动的总数量,不关心方向
- 中位数性质保证最优性
总结
这道题展示了组合优化问题的两种思路:
- 数学方法:利用中位数性质直接求解,高效简洁
- 网络流方法:建模为最小费用流,通用但稍慢
在竞赛中推荐使用数学解法。
- 1
信息
- ID
- 3989
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者