淬炼神体
来源:互联网 发布:mac日本官网 编辑:程序博客网 时间:2024/05/16 10:40
题目大意
有N个东西,选择第i个东西价值为a[i],付出为b[i]。需要选择恰好M个东西来最大化
N<=10^5。结果保留三位小数。
01分数规划
如果
则
则
因此我们可以设d[i]=a[i]-b[i]*c。c是不确定,不过发现c就是答案。因此我们二分c并计算d数组,由于结果大于等于0就代表这个答案是可行的,因此我们对d数组排序然后取前M个检验是否大于等于0。
注意
因为要保留三位小数,所以应当精确到四位,然后四舍五入。
参考程序
#include<cstdio>#include<cmath>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef double db;const int maxn=100000+10;db d[maxn],a[maxn],b[maxn];db p,l,r,mid,ans;int i,j,k,t,n,m;bool cmp(db a,db b){ return a>b;}int main(){ scanf("%d%d",&n,&m); fo(i,1,n) scanf("%lf",&a[i]); fo(i,1,n) scanf("%lf",&b[i]); j=1; fo(i,2,n) if (a[i]/b[i]>a[j]/b[j]) j=i; l=0;r=a[j]/b[j]; while (abs(r-l)>=0.0001){ mid=(l+r+0.0001)/2; fo(i,1,n) d[i]=a[i]-mid*b[i]; sort(d+1,d+n+1,cmp); p=0; fo(i,1,m) p=p+d[i]; if (p>=0) l=mid;else r=mid-0.0001; } printf("%.3lf\n",l); return 0;}
0 0
- 淬炼神体
- <01分数规划>淬炼神体
- .net mvc 一个Action的 HttpGet 和 HttpPost
- spring源码学习(1)-bean包中主要接口部分的简单介绍
- 从上往下打印二叉树
- 无人愿意开发,关于电视游戏你要知道的9点
- 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
- 淬炼神体
- android studio之安装 fetching问题
- python learnOne : 脚本机制,变量对象
- CYC- tableView的删除编辑移动
- grunt学习笔记
- 新的征途
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
- 自定义类似于淘宝的评价星星功能
- 【php爬虫】百万级别知乎用户数据爬取与分析