POJ 3757 Simple Distributed storage system 01分数规划
来源:互联网 发布:windows手机壁纸 编辑:程序博客网 时间:2024/06/03 23:05
时空隧道
题意:
给出n台机器,选出k台来完成任务,最小化fi*ci…
对于每个机器有三个属性p b c
每台机器完成任务的时间=f[i]/p[i]+f[i]/b[i]
要求每台机器完成任务时间相同…并且∑f[i]=F
分析:
最优值问题…考虑转化为可行性问题…那不就是01分数规划么…
01分数规划详解(请自行出门右转)
怎么转化为基本模型呢…
先把信息列出来吧…
ans=∑f[i]*c[i]…
time=f[i]/p[i]+f[i]/b[i]—>f[i]=time*p[i]*b[i]/(p[i]+b[i])…
F=∑f[i]—>F=time*∑x[i] (x[i]=p[i]*b[i]/(p[i]+b[i]))…
time=F/∑x[i]…
ans=∑(x[i]*c[i]*F/∑x[i])…
然后就套模板好啦…
代码如下:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>//by NeighThornusing namespace std;const int maxn=20000+5;int n,k;double F,p[maxn],b[maxn],c[maxn],x[maxn],ans,mid; struct M{ double p,b,c,x; friend bool operator < (M a,M b){ return F*a.x*a.c-mid*a.x<F*b.x*b.c-mid*b.x; }}s[maxn];inline bool check(void){ sort(s+1,s+n+1); double sum=0; for(int i=1;i<=k;i++) sum+=F*s[i].x*s[i].c-mid*s[i].x; if(sum>=0) return true; return false;}signed main(void){ scanf("%d%d%lf",&n,&k,&F); for(int i=1;i<=n;i++) scanf("%lf%lf%lf",&s[i].p,&s[i].b,&s[i].c),s[i].x=s[i].p*s[i].b/(s[i].p+s[i].b); double l=0,r=10000000000; while(r-l>=1e-6){ mid=(l+r)/2.0; if(check()) ans=mid,l=mid; else r=mid; } printf("%.4f\n",ans); return 0;}
by >_< NeighThorn
0 0
- POJ 3757 Simple Distributed storage system 01分数规划
- POJ-3757: Simple Distributed storage system【简单01分数规划(二分)】
- POJ 2976 01分数规划
- 01 分数规划 poj 2976
- POJ 3759 Simple Distributed computing system 已被翻译 感觉和考试题有点像
- POJ 2976 Dropping tests 01分数规划
- POJ 2976 Dropping tests 01分数规划
- poj-2976-Dropping tests-01分数规划
- POJ 2976 Dropping tests 01分数规划
- POJ 2976 01分数规划基础题目
- 【POJ】2976 Dropping tests 01分数规划
- [poj 2976]Dropping tests 01分数规划
- poj 2976(01分数规划最基础)
- POJ 2976,3111 01分数规划
- POJ 2976 Dropping tests (01分数规划)
- POJ 2976 Dropping tests(01分数规划)
- POJ - 2976 Dropping tests 01分数规划
- POJ 2976 Dropping tests 01分数规划
- [T][2]NOIP 2001 单词接龙
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- Java算法之“分解质因数”
- LeetCode 210. Course Schedule II 题解
- 第一个Servlet程序 HelloServlet
- POJ 3757 Simple Distributed storage system 01分数规划
- 博客网站页面的实现(html)
- nodejs实现发送验证码到qq邮箱(附有源码)
- 两个for循环的优缺点
- 【LeetCode】70. Climbing Stairs
- hdu 5700 区间交(优先队列)
- java实现二叉树的创建及5种遍历
- Servlet与表单
- 【SpringBoot】SpringCloud Config Server实践