1 条题解
-
0
题目理解
我们有 种数字,第 种数字有:
- 数值:
- 数量: 个
- 权值:
配对规则:两个数字 和 可以配对,当且仅当:
- 是 的倍数
- 是一个质数
配对收益:
限制条件:
- 每个数字只能参与一次配对
- 总收益(所有配对的价值和)不能小于
- 目标:最大化配对次数
问题分析
1. 配对关系的性质
如果 是 的倍数且 是质数,意味着这两个数在质因数分解上只差一个质因子。
这实际上定义了一个二分图:
- 将数字按质因子个数奇偶性分成两类
- 只有不同类的数字才可能配对
2. 网络流建模
这是一个典型的最大权匹配问题,但有两个特殊之处:
- 有数量限制()
- 要求总权值 的前提下最大化匹配数
我们可以用费用流来解决:
- 源点 → 左部节点:容量 ,费用
- 左部节点 → 右部节点:容量 ,费用 (注意负号)
- 右部节点 → 汇点:容量 ,费用
3. 处理非负总收益约束
由于要求总收益 ,而费用流求的是最小费用,我们可以:
- 在 SPFA 增广时,如果当前累计费用 就停止
- 因为费用是负的收益,费用 意味着收益
算法设计
步骤 1:建图
- 对每个数字分解质因数,按质因子个数奇偶性划分到左右两部
- 对于所有满足配对条件的 ,连边:
- 容量:(实际上用 更简单)
- 费用:
步骤 2:费用流求解
使用 SPFA 找最短路(最小费用路径):
- 每次找到一条从源点到汇点的最短路
- 沿该路径增广 (路径容量,剩余流量)
- 记录当前总费用,如果总费用 就停止
- 否则继续,直到无法增广
步骤 3:输出结果
最终匹配数就是最大流的值。
关键点分析
1. 二分图证明
设 表示 的质因子个数(重复计算)。 如果 是质数,那么 。 因此 和 奇偶性不同,构成二分图。
2. 费用流技巧
由于要求收益不小于 0,而费用流求的是最小费用,我们:
- 将收益的相反数作为费用
- 当累计费用 (即收益 )时停止
3. 复杂度分析
- 节点数:
- 边数:(最坏情况)
- 由于 ,费用流可以接受
样例验证
输入:
3 2 4 8 2 200 7 -1 -2 1
分析:
- ,,
- 配对关系:
- 4/2=2(质数):收益
- 8/4=2(质数):收益
- 8/2=4(非质数):不能配对
最优方案:
- 2个2与2个4配对:收益
- 2个4与2个8配对:收益
- 总收益 ,总配对次数
输出:
4
✓
总结
本题的关键在于:
- 发现配对关系构成二分图
- 用费用流求解最大匹配
- 通过控制费用流停止条件来保证总收益非负
- 注意质数判断和质因数分解的实现
算法复杂度:,在 时可行。
- 1
信息
- ID
- 3228
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者