题意:

     有一个任务,给你提供n太服务器,让你在这n太服务器中选出k台完成这个任务,要求是每台服务器的工作时间相同,总的花费最小。

思路:

     题目中给出对于每台服务器有这个式子:

Total time = Processing time + Transmission time = fi / pi + fi / bi

转化后是: time = fi * (pi + bi) / (pi * bi) 那么也就是说每台服务器的工作速度是

v[i] = (pi * bi) / (pi + bi)

因为所有工作时间是一样的,那么就会有 t = F / sigma(v[i])  (选出K个的)

则总的花费就是 

COST = sigma(fi * c[i])

     = sigma(v[i] * t * c[i])

     = t * sigma(v[i] * c[i])  

     = F / sigma(v[i]) * sigma(v[i] * c[i])

     = F * sigma(v[i] * c[i]) / sigma(v[i])

     = sigma(F * v[i] * c[i]) / sigma(v[i])

这样就满足了01分数规划的要求模式了,直接二分就ok了,这个题目注意点精度问题,还有就是二分的上线开大点。


#include<stdio.h>
#include<algorithm> #define eps 0.000001 #define N 200000 + 100 using namespace std; double X[N];
double V[N];
double D[N]; bool OK(double L ,int n ,int k)
{
for(int i = 1 ;i <= n ;i ++)
D[i] = X[i] - L * V[i];
sort(D + 1 ,D + n + 1);
double sum = 0;
for(int i = 1 ;i <= k ;i ++)
sum += D[i];
return sum <= 0;
} int main ()
{
int n ,k;
double f ,p ,b ,c;
while(~scanf("%d %d %lf" ,&n ,&k ,&f))
{
for(int i = 1 ;i <= n ;i ++)
{
scanf("%lf %lf %lf" ,&p ,&b ,&c);
V[i] = p * b / (p + b);
X[i] = V[i] * c * f;
}
double low = 0 ,up = 10000000000; double mid ,ans;
while(up - low >= eps)
{
mid = (low + up) / 2;
if(OK(mid ,n ,k))
ans = up = mid;
else low = mid;
}
printf("%.4lf\n" ,ans);
}
return 0;
}

 

POJ3757 01分数规划的更多相关文章

  1. POJ3621Sightseeing Cows[01分数规划 spfa(dfs)负环 ]

    Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9703   Accepted: 3299 ...

  2. ZOJ 2676 Network Wars ★(最小割算法介绍 && 01分数规划)

    [题意]给出一个带权无向图,求割集,且割集的平均边权最小. [分析] 先尝试着用更一般的形式重新叙述本问题.设向量w表示边的权值,令向量c=(1, 1, 1, --, 1)表示选边的代价,于是原问题等 ...

  3. POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)

    [题意]每条路径有一个 cost 和 dist,求图中 sigma(cost) / sigma(dist) 最小的生成树. 标准的最优比率生成树,楼教主当年开场随手1YES然后把别人带错方向的题Orz ...

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

    71  奶牛施工队一场地震把约翰家园摧毁了,坚强的约翰决心重建家园.约翰已经修复了 N 个牧场,他需要再修复一些道路把它们连接起来.碰巧的是,奶牛们最近也成立了一个工程队,专门从事道路修复.而然,奶牛 ...

  5. POJ 2976 Dropping tests 01分数规划

    给出n(n<=1000)个考试的成绩ai和满分bi,要求去掉k个考试成绩,使得剩下的∑ai/∑bi*100最大并输出. 典型的01分数规划 要使∑ai/∑bi最大,不妨设ans=∑ai/∑bi, ...

  6. 【转】[Algorithm]01分数规划

    因为搜索关于CFRound277.5E题的题解时发现了这篇文章,很多地方都有值得借鉴的东西,因此转了过来 原文:http://www.cnblogs.com/perseawe/archive/2012 ...

  7. codevs 1183 泥泞的道路 01分数规划

    题目链接 题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和 ...

  8. Dropping tests(01分数规划)

    Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8176   Accepted: 2862 De ...

  9. POJ2728 最小比率生成树/0-1分数规划/二分/迭代(迭代不会)

    用01分数规划 + prime + 二分 竟然2950MS惊险的过了QAQ 前提是在TLE了好几次下过的 = = 题目意思:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一 ...

随机推荐

  1. Windows下常用测试命令

      (1)ping 127.0.0.1 (测试本地网卡,127.0.0.1是本地循环地址,如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作) (2)ping 127.0.0.1  - ...

  2. redis集群(redis_cluster)

    一.为什么要使用redis-cluster? 1.数据并发问题 2.数据量太大 新浪微博作为世界上最大的redis存储,就超过1TB的数据,去哪买这么大的内存条?各大公司有自己的解决方案,推出各自的集 ...

  3. 【Azure API 管理】APIM CORS策略设置后,跨域请求成功和失败的Header对比实验

    在文章"从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能"中分析了CORS返回空200的问题后,进一 ...

  4. apk签名、包名

    //通过各手机管理软件,如如360.豌豆荚等查看 //使用命令行,可以查看到permission.packagename.title.versionCode等 aapt dump badging ~/ ...

  5. VScode 自定义用户代码块

    1定义html中的vue 见地址 https://blog.csdn.net/qq_40191093/article/details/82915028 2  https://www.cnblogs.c ...

  6. Linux sed 使用笔记

    sed 工具使用笔记 Linux中经常需要对一些超大的文本文件进行操作,例如 GB 级别的 CSV.TXT.LOG 文件,如果使用 vi 或者 vim 编辑器操作会非常慢且卡,此时 sed 工具或许可 ...

  7. 数数字(JAVA语言)

    package 第三章习题; /*  * 把前n(n<=10000)个整数顺次写在一起:  * 89101112...  * 数一数0-9各出现多少次  * (输出10个整数,分别是09出现的次 ...

  8. cookie跨域那些事儿

    一个请求从发出到返回,需要浏览器和服务端的协调配合.浏览器要把自己的请求参数带给服务端,服务端校验参数之后,除了返回数据,也可能会顺便把请求是否缓存,cookie等信息告诉浏览器.当请求是跨域请求的时 ...

  9. 阿里最强 Python 自动化工具开源了!

    1. 前言 大家好,我是安果! 最近,阿里内部开源了一个 iOS 端由 Python 编写的自动化工具,即:tidevice 它是一款跨平台的自动化开源工具,不依赖 Xcode 就可以启动 WebDr ...

  10. Java入门环境的搭建

    入门环境搭建 Java帝国的诞生 C & C++ 1972年C诞生 贴近硬件,运行极快,效率极高 操作系统,编译器,数据库,网络系统等 指针和内存管理 1982年C++诞生 面向对象 兼容C ...