POJ 3111 K Best(最大化平均值)
来源:互联网 发布:linux如何调用内核 编辑:程序博客网 时间:2024/05/29 14:30
题目链接:click here~~
【题目大意】有n个物品的重量和价值分别是Wi和Vi,从中选出K个物品使得单位重量的价值最大,输出物品的编号
【解题思路】:最大化平均值的经典.参见click here~~
代码:
//#include <bits/stdc++.h>#include <stdio.h>#include <math.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;const int N=1e5+10;const double eps=1e-8;int n,k,m;struct node{ double y,v,w;//价值,重量 int id;}pp[N];bool cmp(node a,node b){ return a.y>b.y;}bool get(double mid)//可以选择使得单位重量的价值不小于mid{ bool pk; for(int i=0; i<n; i++) pp[i].y=pp[i].v-mid*pp[i].w; sort(pp,pp+n,cmp); //从大到小排序 double sum=0; for(int i=0; i<k; i++) sum+=pp[i].y;//从大往小选择 if(sum>=0) pk=true; else pk=false; return pk;}int main(){ //freopen("1.txt","r",stdin); scanf("%d%d",&n,&k); for(int i=0; i<n; i++){ scanf("%lf%lf",&pp[i].v,&pp[i].w); pp[i].id=i+1; } double ll=0,rr=1e8; while(fabs(ll-rr)>eps) { double mid=(ll+rr)/2; if(get(mid)) ll=mid; else rr=mid; } //printf("%.2f\n",rr); printf("%d",pp[0].id); for(int i=1;i<k;i++) printf(" %d",pp[i].id); puts("");}
0 0
- POJ 3111 K Best 最大化平均值
- POJ 3111 K Best(最大化平均值)
- POJ 3111 K Best(最大化平均值)
- POJ 3111 K Best 【二分:最大化平均值】
- POJ 3111 K Best 二分 最大化平均值
- poj 3111 K Best && poj 2976(最大化平均值)
- POJ 3111 K Best(二分搜索,最大化平均值)
- poj 3111 K Best 二分搜索 最大化平均值
- POJ 3111 K Best(二分——最大化平均值)
- poj 3111 K Best(二分-最大化平均值)
- poj K Best 最大化平均值 二分搜索
- POJ3111-K Best-最大化平均值
- poj3111 K Best【最大化平均值】
- POJ 3111 K Best &&NYOJ 914 (二分+ 贪心,最大化平均值)
- POJ3111 K Best 最大化平均值(二分)
- POJ3111 K Best(二分 最大化平均值)
- POJ 3111 K Best <最大化平均,二分>
- poj 3111 最大化平均值
- OC教程07-字典NSDictionary详解
- 物联网技术上面临的基本问题和操作系统设计
- ASP.NET MVC4中调用WEB API的四个方法
- 第十二周 课后实践:项目二——摩托车继承自行车和机动车
- POJ2155二维线段树
- POJ 3111 K Best(最大化平均值)
- android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
- iOS block内部更新主界面
- weblogic集群session保持的问题
- 清结算概念
- 多事的键盘
- HDU 3047 带权并查集
- ZJ 虚拟机扩磁盘
- poj2175费用流消圈算法