0/1 分数规划
2021-07-05
3 min read
一、简介
0/1 分数规划是一种求最优比率的算法,一般通过二分实现。
二、解决问题
分数规划是用来求解一个分数表达式的最大值/最小值。例如有 个物品,每个物品都有两个权值 和 ,你可以取其中任意件物品,求 最大值。
三、解决方法
我们一般通过二分来求解。
我们二分最终答案 ,设 ,那么显然有
移项得
一般我们贪心地选择 个然后判断是否小于等于 。
四、例题
1. 0/1 分数规划 背包
P4377 [USACO18OPEN]Talent Show G
首先求 的最大值,还是普通的 0/1 分数规划,不过本题多了个限制: 不小于 ,那么我们在 check 的时候不能简单地通过贪心来求解了,而是需要通过背包来判断,注意 的都当 来算。
2. 0/1 分数规划 环
大致是每条边都有两个权值 和 ,找到一个环使得 最小。那么直接二分 ,然后在图上找一个负环,最好用 dfs,似乎比 spfa 快。
P2868 [USACO07DEC]Sightseeing Cows G
这题求最大值,那么也就是要找个正环,可以将其转化为求负环,将边权取负后求负环即可。