01分数规划
问题介绍
01分数规划是大家学习之路上较为经典的一类问题,首先对于这个名字,01的含义一般来说就是“选与不选”,问题原型如下
当前有n个物品,每个物品都有其价值 v i v_i vi 与成本 w i w_i wi,要求我们从中选出k(k<=n)个物品,使得总价值与总成本的比例最大(最小),也就是对于选出的这k个物品
1 < = j < = k 1 <= j <= k 1<=j<=k
有 ∑ 1 k v j / ∑ 1 k w j \sum_1^k{v_j} / \sum_1^k{w_j} ∑1kvj/∑1kwj 最大(最小),求这个最值
- PS:对于这个问题,网上有些介绍可能少了其中的“k个”,而是描述为“选一些”,当然这样可能更加宽泛,但是容易出现误解,我一开始就误以为“一些”是”任意个“的意思,结果发现这样想的话,只用选性价比最高的那个物品就行了,显然这样是不行的
解决方法/算法过程
- 1.式子变形
一开始要对这个式子进行变形,以最大值为例,设答案为 a n s ans ans 则在选出的k个中有:
∑ 1 k v j / ∑ 1 k w j ≤ a n s \sum_1^k{v_j} / \sum_1^k{w_j} \le ans 1∑kvj/1∑kwj≤ans
即
∑ 1 k v j ≤ a n s ∗ ∑ 1 k w j \sum_1^k{v_j} \le ans * \sum_1^k{w_j} 1∑kvj≤ans∗1∑kwj
得
∑ 1 k v j − a n s ∗ ∑ 1 k w j ≤ 0 \sum_1^k{v_j} - ans * \sum_1^k{w_j} \le 0