POJ 3111 K Best(最大化平均值)
题目链接: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("");
}
POJ 3111 K Best(最大化平均值)的更多相关文章
- poj 3111 K Best 最大化平均值 二分思想
poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...
- POJ 3111 K Best 最大化平均值 [二分]
1.题意:给一共N个物品,每个物品有重量W,价值V,要你选出K个出来,使得他们的平均单位重量的价值最高 2.分析:题意为最大化平均值问题,由于每个物品的重量不同所以无法直接按单位价值贪心,但是目标值有 ...
- POJ 2976 3111(二分-最大化平均值)
POJ 2976 题意 给n组数据ai,bi,定义累计平均值为: 现给出一个整数k,要求从这n个数中去掉k个数后,最大累计平均值能有多大?(四舍五入到整数) 思路 取n−k个数,使得累计平均值最大. ...
- POJ 3111 K Best(01分数规划)
K Best Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 9876 Accepted: 2535 Case Time ...
- poj 3111 K Best (二分搜索之最大化平均值之01分数规划)
Description Demy has n jewels. Each of her jewels has some value vi and weight wi. Since her husband ...
- POJ 3111 K Best(二分答案)
[题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...
- poj3111 K Best 最大化平均值,二分
题目:http://poj.org/problem?id=3111 题意:给你n,k,n个数的v.w值,选出k个数,使得v之和/w之和最大化. 思路:一看到题目,这不是赤果果的贪心吗?为什么放在二分专 ...
- POJ 3111 K Best
二分,排序,贪心. 最优比率生成树,可以二分$+$贪心来实现,不过这样做精度不行. 如果是这样一个问题,该如何解决:问你$n$个里面选择$k$个,能否使得$\frac{{\sum\limits_{j ...
- POJ - 3111 K Best 0-1分数规划 二分
K Best Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 12812 Accepted: 3290 Case Time ...
随机推荐
- TCP粘包拆包问题
阿π 专注于网络协议,系统底层,服务器软件 C++博客 | 首页 | 发新随笔 | 发新文章 | | | 管理 Socket粘包问题 这两天看csdn有一些关于socket粘包,socket缓冲区设置 ...
- LayoutInflater 与 inflate
Instantiates a layout XML file into itscorresponding View objects. LayoutInflater作用是将layout的xml布局文件实 ...
- Sentinel-1雷达数据可以免费下载
The Sentinel-1 Scientific Data Hub(https://scihub.esa.int )网站提供免费下载 Sentinel-1雷达数据Level-0 和 Level-1级 ...
- webservice axis2客户端设置代理方法(公司网络通过代理访问时)
webservice axis2客户端设置代理方法(公司网络通过代理访问时) UploadProcessInServiceStub stub = new UploadProcessInServic ...
- POJ 3111 K Best(二分答案)
[题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...
- c语言结构体排序示例
设计性实验编程实现对学生成绩表的相关信息排序.实验要求:⑴ 建立一个由n个学生的考试成绩表,每条信息由学号.姓名和分数组成.⑵ 按学号排序,并输出排序结果.⑶ 按分数排序,分数相同的则按学号有序,并输 ...
- aix创建lv 在lv上创建文件系统
创建LV命令: mklv -y softlv -t jfs2 rootvg 15G 创建文件系统命令: crfs -v jfs2 -d/dev/softlv -m /soft -A yes 把soft ...
- AndroidUI 布局动画-点九PNG技术
下面是正常情况与使用点9切图以后的效果对比: <Button android:id="@+id/button1" android:layout_width="fil ...
- Linux是什么
计算机主要以二进制为单位,而目前常用的磁盘容量单位为B,其单位换算为1B=8bit,其他的以1024为其倍数,如1GB=1024MB等. 操作系统(Operation System)主要用于管理与驱动 ...
- 如何更快速加载你的JS页面
确保代码尽量简洁 不要什么都依赖JavaScript.不要编写重复性的脚本.要把JavaScript当作糖果工具,只是起到美化作用.别给你的网站添加大量的JavaScript代码.只有必要的时候用一下 ...