分数规划小结

https://www.zybuluo.com/ysner/note/1262173

定义

给定数列\(\{a\},\{b\}\),求解一组数列\(\{x\}\)(\(x_i=\{0,1\}\))

使得\[\frac{\sum_{i=1}^na_i*x_i}{\sum_{i=1}^nb_i*x_i}\]

最大化。

方法

主要是二分答案。

设二分出的值为\(mid\),

则应有\[\frac{\sum_{i=1}^na_i*x_i}{\sum_{i=1}^nb_i*x_i}\geq mid\]

化化式子

\[\sum_{i=1}^na_i*x_i\geq mid*\sum_{i=1}^nb_i*x_i\]

\[\sum_{i=1}^na_i*x_i-mid*\sum_{i=1}^nb_i*x_i\geq0\]

于是只要找出一组\(a_i-mid*b_i\geq0\),就能说明\(ans\geq mid\),缩小了二分范围。

实现

一般都是边权设为\(a_i-mid*b_i\),然后判图中是否有负环,或者网络流看能否跑出正费用。

题目

  • [X] [HNOI2009]最小圈

    \(a_i\)是边权,\(b_i=1\),改下不等号方向,找负环即可。

  • [x] [APIO2017]商旅

    把所有能交易的一对集市都连起来,预处理出每对间的距离\(b_i\),和可能得到的最大利润\(a_i\)(即商品最大差价)。

    然后把所有点入队找非负环即可。

    当然如果你入队了却不标记,就会卡在\(94pts\)卡半年。

  • [X] [SCOI2014]方伯伯运椰子
  • [x] [SDOI2017]新生舞会
  • [x] [bzoj3232]圈地游戏

原文地址:https://www.cnblogs.com/yanshannan/p/9535955.html

时间: 2024-10-09 06:31:45

分数规划小结的相关文章

【BZOJ3232】圈地游戏 分数规划+最小割

[BZOJ3232]圈地游戏 Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到回到出发点,且在行走途中不允许与已走过的路线有任何相交或触碰(出发点除外).记这条封闭路线内部的格子总价值为V,路线上的费用总和为C,DZY想知道V/C的最大值是多少. Input 第一行为两个正整数n,m. 接下来n行,每行m个非负整数,表示对应格子的价值. 接下来n

01分数规划模板

/* 01分数规划模板(Dinkelbach) 01分数规划就是把 sum(a)/sum(b)转换成 f(x)=sum(a)-ans*sum(b); 当f(x)取到0时,ans取到了最大(小)值 poj 2976 两个长度为n的数组a,b 可以除去m个,怎样选择才能使剩下的 sum(a)/sum(b)的百分数最大 */ int n,m; struct Node{ int a,b; double v; ///用于排序筛选较大的值(题目要求极大值 bool operator<(const Node&am

poj3621 Sightseeing Cows --- 01分数规划

典型的求最优比例环问题 参考资料: http://blog.csdn.net/hhaile/article/details/8883652 此题中,给出每个点和每条边的权值,求一个环使 ans=∑点权/∑边权 最大. 因为题目要求一个环,而且必然是首尾相接的一个我们理解的纯粹的环,不可能是其他样子的环, 所以我们可以把一条边和指向的点看做整体处理. 上面方程可以化为:ans×e[i]-p[i]=0 以它为边权二分答案,spfa求负环,有负环则该ans可行,增大下界. 若一直不可行,则无解. #i

【Earthquake, 2001 Open 】 0-1 分数规划

71  奶牛施工队一场地震把约翰家园摧毁了,坚强的约翰决心重建家园.约翰已经修复了 N 个牧场,他需要再修复一些道路把它们连接起来.碰巧的是,奶牛们最近也成立了一个工程队,专门从事道路修复.而然,奶牛们很有经济头脑,如果无利可图,它们是不会干的.约翰和奶牛达成了协议,约翰向奶牛支付 F 元,奶牛负责修路,但不必修复所有道路,只要确保所有牧场连通即可.可供奶牛选择修复的道路有 M 条,第 i 条道路连接第 Ui 个牧场和第 Vi 个牧场,修复需要 Ti 分钟,支出成本为 Ci.保证连通所有牧场的道

bzoj1690:[Usaco2007 Dec]奶牛的旅行(分数规划+spfa判负环)

前段时间准备省选没更,后段(?)时间省选考砸没心情更,最近终于开始恢复刷题了... 题目大意:有n个点m条有向边的图,边上有花费,点上有收益,点可以多次经过,但是收益不叠加,边也可以多次经过,但是费用叠加.求一个环使得收益和/花费和最大,输出这个比值. 显然这就是经典的分数规划题啊,就是最优比率环,那么就二分答案,将所有边(u,v)的边权改为[v的点权-(u,v)原边权*mid],这可以算是最优比率环的公式了吧,然后判一下是否有正环,有的话就说明答案可行.判正环有够别扭的,那就全部改成相反数然后

[Usaco2007 Dec][BZOJ1690] 奶牛的旅行|分数规划|二分|SPFA

1690: [Usaco2007 Dec]奶牛的旅行 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 700  Solved: 363[Submit][Status][Discuss] Description 作为对奶牛们辛勤工作的回报,Farmer John决定带她们去附近的大城市玩一天.旅行的前夜,奶牛们在兴奋地讨论如何最好地享受这难得的闲暇. 很幸运地,奶牛们找到了一张详细的城市地图,上面标注了城市中所有L(2 <= L <= 1000)座标志

poj2976_01分数规划

题目链接:http://poj.org/problem?id=2976 题意:给定A数组和B数组,从中选n-k对数,使得题目里给的表达式的值最小 思路:01分数规划 参考链接:http://blog.csdn.net/hhaile/article/details/8883652 代码: #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<c

【POJ3621】Sightseeing Cows 分数规划

[POJ3621]Sightseeing Cows 题意:在给定的一个图上寻找一个环路,使得总欢乐值(经过的点权值之和)/ 总时间(经过的边权值之和)最大. 题解:显然是分数规划,二分答案ans,将每条边的权值变成(ans*边权-2*起始点点权),然后我们希望找出一个环,使得环上的总边权<0 (一开始我把题意理解错了,题中给的是单向边,我把它当成是双向边+每条边只能走一次了~,想出一堆做法都接连pass掉) 然后就直接用SPFA判负环就好了嘛!由于原图不一定联通,所以一开始就把所有点都入队就完事

Yougth的最大化(好题,二分查找 0 1分数规划)

Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi.(1<=k=n<=10000) (1<=Wi,Vi<=1000000) 输出 输出使得单位价值的最大值.(保留两位小数) 样例输入 3 2 2 2 5 3 2 1 样例输出 0.75 1 #in