01分数规划基本类型

01分数规划
01分数规划就是给出\(n\)个二元组\((v_1,w_1),(v_2,w_2),\cdots,(v_n,w_n)\),选出具有\(k\)个元素的集合\(S\),使得\(\frac{\sum_{i\in S}v_i}{\sum_{i\in S}w_i}\)最大(或者最小)。
求解的基本方法是二分答案。
判断是否存在集合\(S\),使得\(\frac{\sum_{i\in S}v_i}{\sum_{i\in S}w_i}\geq x\)
也就是\(\sum_{i\in S}v_i-x*\sum_{i\in S}w_i\geq 0\)
即为\(\sum_{i\in S}(v_i-x*w_i)\geq 0\)
因此,将所有元素按照\((v_i-x*w_i)\)的值从大到小排序,贪心选取前\(k\)个,判断是否大于等于零,从而判断当前答案是否可行。
每次判断的时间复杂度\(O(n\log n)\),总的时间复杂度\(O(n\log n\log m)\)\(m\)表示二分的范围。
最优比率生成树
无向图中的每一条边\(i\)都有花费\(c_i\)和权值\(s_i\),从中选出边集\(S\)构成一棵生成树,使得\(\frac{\sum_{i\in S}c_i}{\sum_{i\in S}s_i}\)最小。
和01分数规划类似,二分答案。
\(\frac{\sum_{i\in S}c_i}{\sum_{i\in S}s_i}\leq x\)
\(\sum_{i\in S}(c_i-x*s_i)\leq 0\)
每次将每一条边的边权设为\((c_i-x*s_i)\),通过\(prime\)算法求出最小生成树,判断最小生成树的总权值是否小于等于零,从而判断当前答案是否可行。
最优比率环
有向图中每个点有点权\(w_i\),每条边有边权\(s_j\),从中选出一个环,集合\(S\)中的元素为环中每个点权和对应入边边权组成的二元组,使得\(\frac{\sum_{k\in S}w_k}{\sum_{k\in S}s_k}\)最大。
同样类似于01分数规划,二分答案。
\(\frac{\sum_{k\in S}w_k}{\sum_{k\in S}s_k}\geq x\)
\(\sum_{k\in S}(w_k-x*s_k)\geq 0\)
改成小于等于零的形式:
\(\sum_{k\in S}(x*s_k-w_k)\leq 0\)
这样可以使用SPFA判断是否存在负环,从而判断当前答案是否可行。

posted @ 2020-07-22 17:14  fxq1304  阅读(108)  评论(0编辑  收藏  举报