前言

听说教主有一次在ACMACM里面速A了一题最优比率生成树问题,然而后面许多人跟风失败….算了还是好好学习,天天向上,OrzOrz教主吧。

题意

给你n对数a[i],b[i]a[i],b[i],让你取m对,使得∑a[i]∑b[i]\frac{\sum a[i]}{\sum b[i]}最大。

数据范围

对于100%的数据,2≤K≤N≤100000,1≤a,b≤1000

分析

数学分析中一个很重要的方法就是分析目标式,这样我们来看目标式。

R=∑(a[i]∗x[i])/∑(b[i]∗x[i])R=\sum (a[i]*x[i])/\sum(b[i]*x[i])
这时可以设一个函数f(L)=∑a[i]∗x[i]−∑b[i]∗x[i]∗Lf(L)=\sum a[i]*x[i]-\sum b[i]*x[i]*L让这个式子尽量接近原式RR。
那么这时可以设f(L)>0,则∑a[i]∗x[i]−∑b[i]∗x[i]∗L>0f(L)>0,则\sum a[i]*x[i]-\sum b[i]*x[i]*L>0
移项∑a[i]∗x[i]>∑b[i]∗x[i]∗L\sum a[i]*x[i]>\sum b[i]*x[i]*L
再转成(∑a[i]∗x[i])/(∑b[i]∗x[i])(\sum a[i]*x[i])/(\sum b[i]*x[i])的形式:
(∑a[i]∗x[i])/(∑b[i]∗x[i])>L(\sum a[i]*x[i])/(\sum b[i]*x[i])>L
这时很明显L越大,则答案(∑a[i]∗x[i])/(∑b[i]∗x[i])(\sum a[i]*x[i])/(\sum b[i]*x[i])越大。(注意要保证f(l)>0f(l)>0)
这就是二分法了,去二分L,再去验证f(L)f(L)是否大于00,且这时的方案x[i]x[i]就可以先排个序(因为我们要使f(L)f(L)的值尽量的大)这时就可以不用理x[i]x[i],直接变成了(∑a[i])/(∑b[i])(\sum a[i])/(\sum b[i])
模型:

二分法
L:=…;R:=…;
Repeat
Mid:=(L+R)/2;
For I=1..X do D[i]:=A[i]-Mid*B[i];//根据Mid计算D数组
if 检查(Mid)成功 then L:=Mid else R:=Mid;
Until abs(L-R)

#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int N=100005;
int i,n,m,a[N],b[N];
double d[N],an,l,r,mid;
int main(){scanf("%d %d",&n,&m);fo(i,1,n) scanf("%d",&a[i]);fo(i,1,n) {scanf("%d",&b[i]);}l=1;r=N;while (r-l>0.00001) {mid=(l+r)/2*1.0;fo(i,1,n) d[i]=a[i]-mid*b[i];sort(d+1,d+n+1);an=0;fd(i,n,n-m+1) an=an+d[i];if (an>0) l=mid; else r=mid;}printf("%.3lf",(l+r)/2*1.0);
}

01分数规划淬炼神体相关推荐

  1. poj2976(0-1分数规划)

    0-1分数规划 设x[i]等于1或0. 则我们所求的比率 rate = ∑(cost[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m . z( rate ) = ∑( ...

  2. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]

    题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈s​v(e)​ ...

  3. 解题报告:AcWing 1165. 单词环(01分数规划、hash、经验优化)

    本题的关键在于: 建图 01分数规划 本题的数据过大,如果直接spfa判断会TLE,因此我们使用经验优化,就是如果所有的点入队的次数过多,比如大于100000,那么我们直接认为它是存在正环的.(免去T ...

  4. 模板 - 判断负环(超时高效优化技巧)、01分数规划

    整理的算法模板合集: ACM模板 判断负环 判正环求最长路,判负环求最短路 int n; // 总点数 int h[N], w[N], e[N], ne[N], idx; // 邻接表存储所有边 in ...

  5. 【图论专题】负环与01分数规划

    整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 904. 虫洞 spfa判负环 AcWing 361. 观光奶牛 最优比率环.01分数规划 AcWing 1165. 单词环 0 ...

  6. POJ2728 Desert King ——01分数规划Dinkelbach迭代法+最小生成树prim算法

    首先,纪念我用Linux系统AC的第一题-   安装这个万恶的NOI Linux系统费了6小时的时间,不过好在最后终于装上了,但是因为我安装的Linux系统比较烂,还遭到了小花儿和js的鄙视,唉,本人 ...

  7. POJ 2728 01分数规划

    题意: 最优比率生成树,要求生成树中的所有边的花费与所有边的长度的比值最小 题解: 01分数规划,详见http://www.cnblogs.com/proverbs/archive/2013/01/0 ...

  8. codevs1183 泥泞的道路(01分数规划)

    1183 泥泞的道路  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description CS有n个小区,并且任意小区之间都有两 ...

  9. P1642 规划 01分数规划+树形DP

    $ \color{#0066ff}{ 题目描述 }$ 某地方有N个工厂,有N-1条路连接它们,且它们两两都可达.每个工厂都有一个产量值和一个污染值.现在工厂要进行规划,拆除其中的M个工厂,使得剩下的工 ...

最新文章

  1. juery mobile select下来菜单选项提交form问题
  2. 【Linux】 字符串和文本处理工具 grep sed awk
  3. 极客新闻——12、错误和失败的区别是什么?
  4. 程序员为什么要单身?
  5. junit:junit_处理JUnit中异常的另一种方法:catch-exception
  6. LeetCode 1560. 圆形赛道上经过次数最多的扇区
  7. 如何拉取公网RTSP/RTMP流在内网多客户端播放
  8. 电脑字体在哪个文件夹_壹心奇妙体下载 壹心奇妙体 字体下载
  9. 数据结构笔记-----链表
  10. 用python 开发FreeCad 入门
  11. 计算机处理系统比人工的优势,人工智能技术的优势及其在计算机网络中的应用...
  12. 微信小程序直接打开文件操作(pdf)
  13. 动态仙人掌 系列题解之二——3465: 动态仙人掌 II
  14. 学编程看书好还是看视频好?
  15. 【STM32F429】第13章 任务调度—抢占式,时间片和合作式
  16. 北京旧书店(二手书店)
  17. SuperMap iClient3D for WebGL 用 WebMapTileServiceImageryProvider 接口加载天地图 WMTS 服务
  18. [Git]Git教程之msysgit(命令行形式)
  19. SuperMap BIM+GIS-Revit模型处理-第三节 Revit模型优化方法及模型缓存策略
  20. 比尔·盖茨 2021~2016 年度喜爱书单,附下载方式

热门文章

  1. layui 怎么给input 赋值_layui 之 checkbox动态赋值
  2. 在腾讯云轻量应用服务器上自建网盘教程
  3. 天猫店群是什么意思?天猫店群和传统模式相比有什么优势?
  4. 元宇宙的应用价值体现在哪些方面
  5. 【设计模式自习室】原型模式
  6. 网站301怎么开启并设置
  7. ora01722java_java.sql.SQLSyntaxErrorException: ORA-01722: 无效数字
  8. NSGA2多目标优化算法的MATLAB仿真
  9. 如何用cmd打开python的.ipynb文件(打开,并不是转为.py文件)
  10. 读书笔记----哲学家们都干了什么