POJ 2976 3111(二分-最大化平均值)
POJ 2976
题意
给n组数据ai,bi,定义累计平均值为:

现给出一个整数k,要求从这n个数中去掉k个数后,最大累计平均值能有多大?(四舍五入到整数)
思路
取n−k个数,使得累计平均值最大。
定义C(x)表示能否取得n−k个数,使得累计平均值≥x。然后二分搜索最大的x。
可以这样判断可行性:

只需要从大到小选取n−k个(100⋅ai−x⋅bi)并求和sum,根据sum≥0来判断(上述的S表示n−k个元素下标的集合)
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long ll;
int n, k;
ll a[1000 + 4], b[1000 + 4];
double c[1000 + 4];
bool C(double x) { // 检验取出的n-k个数的累计平均值是否能>=x
for (int i = 0; i < n; ++i) c[i] = a[i] * 100 - x*b[i];
sort(c, c + n);
double sum = 0;
for (int i = 0; i < n - k; ++i) sum += c[n - i - 1];
return sum >= 0;
}
void solve() {
double lb = 0, ub = 1000000000000000.0;
for (int i = 0; i < 100; ++i) { // 精度10e-30
double mid = (ub + lb) / 2.0;
if (C(mid)) lb = mid; // 半闭半开区间[lb, ub)
else ub = mid;
}
printf("%.f\n", floor(lb + 0.5)); // 四舍五入
}
int main()
{
while (cin >> n >> k) {
if (n == k && n == 0) break;
for (int i = 0; i < n; ++i) cin >> a[i];
for (int i = 0; i < n; ++i) cin >> b[i];
solve();
}
return 0;
}
POJ 3111
题意
给出n个珠宝的vi和wi,从中选出k个珠宝,使得
最大,求出这k个珠宝的序列。
思路
同上,排序时需记录序号。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std;
const double EPS = 1e-6;
int n, k;
int v[100000 + 5], w[100000 + 5];
struct Remian{
double c;
int id;
bool operator<(const Remian&b) const {
return c > b.c;
}
} remain[100000 + 5];
bool C(double x) {
for (int i = 0; i < n; ++i) {
remain[i].c = v[i] - w[i] * x;
remain[i].id = i + 1; // 记录宝珠编号
}
sort(remain, remain + n);
double sum = 0.0;
for (int i = 0; i<k; ++i) sum += remain[i].c;
return sum >= 0;
}
void solve() {
double lb = 0.0, ub = 1000000000000000.0;
//while (ub - lb > EPS) { // 精度1e-6
for(int i=0; i<80; ++i) { // 精度10e-30
double mid = (lb + ub) / 2.0;
if (C(mid)) lb = mid; // 半闭半开区间[lb, ub)
else ub = mid;
}
for (int i = 0; i < k; ++i) printf(i == 0 ? "%d" : " %d", remain[i].id);
printf("\n");
}
int main()
{
scanf("%d%d", &n, &k);
for (int i = 0; i < n; ++i) scanf("%d%d", &v[i], &w[i]);
solve();
return 0;
}
POJ 2976 3111(二分-最大化平均值)的更多相关文章
- poj 2976 Dropping tests (最大化平均值:二分查找)
#include<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #d ...
- POJ_3111_K_Best_(二分,最大化平均值)
描述 http://poj.org/problem?id=3111 n个珠宝,第i个有价值v[i]和重量w[i],要从总选k个,使得这k个的(价值之和)/(重量之和)即平均价值最大,输出选中的珠宝编号 ...
- POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))
题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...
- POJ:2976 Dropping tests(二分+最大化平均值)
Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...
- POJ 2976 Dropping tests【二分 最大化平均值】
题意:定义最大平均分为 (a1+a2+a3+---+an)/(b1+b2+---+bn),求任意去除k场考试的最大平均成绩 和挑战程序设计上面的最大化平均值的例子一样 判断是否存在x满足条件 (a1+ ...
- NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】
914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...
- poj 2976(二分搜索+最大化平均值)
传送门:Problem 2976 参考资料: [1]:http://www.hankcs.com/program/cpp/poj-2976-dropping-tests-problem-solutio ...
- poj 3111 K Best 最大化平均值 二分思想
poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...
- 二分算法的应用——最大化平均值 POJ 2976 Dropping tests
最大化平均值 有n个物品的重量和价值分别wi 和 vi.从中选出 k 个物品使得 单位重量 的价值最大. 限制条件: <= k <= n <= ^ <= w_i <= v ...
随机推荐
- memcache的下载与安装
memcache的安装: 建议安装1.4.4版本 Windows 下安装 Memcached 官网上并未提供 Memcached 的 Windows 平台安装包,我们可以使用以下链接来下载,你需要根据 ...
- div 只显示两行超出部分隐藏
; -webkit-box-orient: vertical;line-height: 26px } <td rowspan="2" colspan="2" ...
- Poj3696 The Lukiest Number
传送门 Solution 懒得写啦 Code #include<iostream> #include<cstdio> #include<cmath> #define ...
- NOIP2016 D2-T3 愤怒的小鸟
看了题解之后知道,是状压dp. 一.首先预处理一个$2^n$次方的fpow[]数组 fpow[]=; ;i<=;i++)fpow[i]=(fpow[i-]<<); 二.然后预处理一个 ...
- 参数在一个线程中各个函数之间互相传递的问题(ThreadLocal)
ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源. 一个ThreadLocal变量虽然是 ...
- 关于Linux 虚拟机如何才能ping 通外网
需要虚拟机能够联网.以前都是用桥接模式让虚拟机跟主机通信,这几天查了好多资料,都没有写得很详细,自己捣鼓了很久,把步骤写下来吧. 虚拟机操作步骤: 点击虚拟机的“菜单栏”上的“编辑”,再点击“虚拟网络 ...
- Apple Watch 开发详解
Apple Watch 开发详解 Apple Watch现在对于第三方开发者来说更多的还是一块额外的屏幕.暂时WatchKit没有能给出足够的接口.现在Watch App的主要运算逻辑需要依赖iPho ...
- transform 图标旋转,IE8、IE7不兼容
要将图标旋转,只需使用transform的rotate以及transition即可完成旋转的动画效果.ease 规定慢速开始,然后变快,然后慢速结束的过渡效果; ease-in 规定以慢速开始的过 ...
- Java 注解 (Annotation)你可以这样学
注解语法 因为平常开发少见,相信有不少的人员会认为注解的地位不高.其实同 classs 和 interface 一样,注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念. 注解的 ...
- Xtion pro live OpenNI2.2 Nite 2.2 安装配置1.0
1. 安装ubuntu14.04依赖项 $ sudo ln -s /lib/x86_64-linux-gnu/libudev.so.1.3.5 /lib/x86_64-linux-gnu/libude ...