poj 3111 卖珠宝问题 最大化平均值
题意:有N件分别价值v重量w的珠宝,希望保留k件使得 s=v的和/w的和最大
思路:找到贡献最大的
- 设当前的s为mid(x)
- 那么贡献就是 v-w*x 排序 ,取前k个
bool operator<(const node& c) const
{
return v - x * w > c.v - x * c.w;
} - 如果前k的s>mid说明 mid太小 增下限
- 如果前k的s<mid说明 mid太大 减上限
解决问题的代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std; #define maxn 100000
double x;
int n, k; struct node {
int v, w;
int id;
bool operator<(const node& c) const
{
return v - x * w > c.v - x * c.w;
}
}no[maxn]; bool solve(double mid)
{
x = mid;
sort(no, no + n);
double v = , w = ;
for (int i = ; i < k; i++)
{
v += no[i].v; w += no[i].w;
}
return v / w > mid;
} int main()
{
double maxs = ;
scanf("%d%d", &n, &k);
for (int i = ; i < n; i++)
{
scanf("%d%d", &no[i].v, &no[i].w);
no[i].id = i + ;
maxs = max(maxs, (double)no[i].v / no[i].w);
}
double lb = , ub = maxs;
for (int i = ; i < ; i++)
{
double mid = (lb + ub) / ;
if (solve(mid)) lb = mid;
else ub = mid;
}
int ids[maxn];
for (int i = ; i < k; i++)
{
ids[i] = no[i].id;
}
sort(ids, ids + k);
for (int i = ; i < k; i++)
printf("%d ", ids[i]);
printf("\n");
return ;
}
poj 3111 卖珠宝问题 最大化平均值的更多相关文章
- POJ 2976 Dropping tests (最大化平均值)
题目链接:click here~~ [题目大意]给你n个分数的值,要求最小不选k个,使得最后分数相加结果平均值最大 [解题思路]:最大化平均值:參见:click here~~ 代码: #include ...
- POJ 2976 Dropping tests(最大化平均值 or 01整数规划)
题目链接 忽略运算符逻辑导致奇怪的错误(代码中指明位置了) 输出没加0.5,WA. 还有,注意特殊情况k=0,所以scanf("%d%d", &n, &k)& ...
- poj 3111 K Best 最大化平均值 二分思想
poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...
- POJ 2976 3111(二分-最大化平均值)
POJ 2976 题意 给n组数据ai,bi,定义累计平均值为: 现给出一个整数k,要求从这n个数中去掉k个数后,最大累计平均值能有多大?(四舍五入到整数) 思路 取n−k个数,使得累计平均值最大. ...
- POJ 3111 K Best(最大化平均值)
题目链接:click here~~ [题目大意]有n个物品的重量和价值各自是Wi和Vi.从中选出K个物品使得单位重量的价值最大,输出物品的编号 [解题思路]:最大化平均值的经典.參见click her ...
- POJ 3111 K Best 最大化平均值 [二分]
1.题意:给一共N个物品,每个物品有重量W,价值V,要你选出K个出来,使得他们的平均单位重量的价值最高 2.分析:题意为最大化平均值问题,由于每个物品的重量不同所以无法直接按单位价值贪心,但是目标值有 ...
- poj 2976(二分搜索+最大化平均值)
传送门:Problem 2976 参考资料: [1]:http://www.hankcs.com/program/cpp/poj-2976-dropping-tests-problem-solutio ...
- 二分算法的应用——最大化平均值 POJ 2976 Dropping tests
最大化平均值 有n个物品的重量和价值分别wi 和 vi.从中选出 k 个物品使得 单位重量 的价值最大. 限制条件: <= k <= n <= ^ <= w_i <= v ...
- POJ:2976 Dropping tests(二分+最大化平均值)
Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...
随机推荐
- HDU5972Regular Number(ShiftAnd算法 bitset)
题意 题目链接 第一行的\(n\)表示模式串长度为\(n\) 接下来\(n\)行,每行开头有一个整数\(num\)表示匹配串中该位置的字符可以在\(num\)个桅子花出现,接下来输入这\(num\)个 ...
- js之正则表达式(RegExp对象)
先看一个很有意思的例子: 用字面量的方式定义了一个正则表达式 /\w/g,再重复匹配字符串 ‘ab’ 的时候,出现了结果不唯一的现象. 很多新手都对这种现象感到困惑,难道是正则表达式不稳定吗? 接下来 ...
- HTML头部元素实例
HTML head 元素 标签 描述 <head> 定义了文档的信息 <title> 定义了文档的标题 <base> 定义了页面链接标签的默认链接地址 <li ...
- canvas剪辑区域
- 【Android学习入门】Android studio基本设置
1.背景设置 依次选择File->Settings-->Appearance & Behaviour->Apprearance,然后勾选 show line number. ...
- 升级jdk注意事项
最好使用和编译的jdk相同版本的jre去执行.class程序. 今天在本地模拟部署项目到tomcat6就遇到了个坑. 我们项目使用的jdk1.7开发的,编译打war包放到webapps后,启动报错Ex ...
- 5步玩转Power BI Embedded,老司机全程带路解析
最近,由世纪互联运营的 Microsoft Azure 发布了一个超级炫酷的服务 Power BI Embedded,该服务可以通过 REST API 和 Power BI SDK 将 Power B ...
- Python基础学习之文件(1)
1.文件对象 文件对象不仅可以用来访问普通的磁盘文件,还可以访问具有文件类型接口的其他对象;文件只是连续的字节序列. 2.文件内建函数(open()) 内建函数open()是打开文件的"钥匙 ...
- 概念:静态static相关知识
在面向对象中,有‘静态’概念,通过关键字static进行说明, 例如: 静态属性:public static $name = '小仓鼠' 静态方法:public static function Nam ...
- 利用XShell和WinSCP连接本机和Linux虚拟机——Kali部署
1.XShell支持在本机直接连接Linux终端,加快速度,支持命令的复制粘贴 2.WinSCP 支持本机与Linux的文件复制粘贴 关键:使用SSH协议,所以要在Linux开启ssh服务,下面以Ka ...