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(二分-最大化平均值)的更多相关文章

  1. poj 2976 Dropping tests (最大化平均值:二分查找)

    #include<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #d ...

  2. POJ_3111_K_Best_(二分,最大化平均值)

    描述 http://poj.org/problem?id=3111 n个珠宝,第i个有价值v[i]和重量w[i],要从总选k个,使得这k个的(价值之和)/(重量之和)即平均价值最大,输出选中的珠宝编号 ...

  3. POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))

    题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...

  4. POJ:2976 Dropping tests(二分+最大化平均值)

    Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...

  5. POJ 2976 Dropping tests【二分 最大化平均值】

    题意:定义最大平均分为 (a1+a2+a3+---+an)/(b1+b2+---+bn),求任意去除k场考试的最大平均成绩 和挑战程序设计上面的最大化平均值的例子一样 判断是否存在x满足条件 (a1+ ...

  6. NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】

    914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...

  7. poj 2976(二分搜索+最大化平均值)

    传送门:Problem 2976 参考资料: [1]:http://www.hankcs.com/program/cpp/poj-2976-dropping-tests-problem-solutio ...

  8. poj 3111 K Best 最大化平均值 二分思想

    poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...

  9. 二分算法的应用——最大化平均值 POJ 2976 Dropping tests

    最大化平均值 有n个物品的重量和价值分别wi 和 vi.从中选出 k 个物品使得 单位重量 的价值最大. 限制条件: <= k <= n <= ^ <= w_i <= v ...

随机推荐

  1. pip常用记录

    同电脑多版本python python2 -m pip install 包名(python2指向2.7的python.exe) 指定版本 pip install 包名==版本号 指定源 pip ins ...

  2. C# 实现Bezier曲线(vs2008)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  3. 基于Redis主从复制读写分离架构的Session共享(Windows Server)

    搭建主从复制 1.安装软件 下载Redis-x64-3.2.100.zip:https://github.com/MicrosoftArchive/redis/releases 第一步:将Redis拷 ...

  4. ELF文件解析(二):ELF header详解

    上一篇讲了ELF文件的总体布局,以及section和segment的概念.按照计划,今天继续讲 ELF header. 讲新的内容之前,先更正一个错误:上一篇中讲section header tabl ...

  5. MongoDB - 日常操作二

    MongoDB 开启认证与用户管理  ./mongo # 先登录 use admin # 切换到admin库 db.addUser(") # 创建用户 db.addUser('zhansan ...

  6. MySQL指令

    在mysql里:文件夹就是数据库      文件就是表 创建用户: 格式:create user '用户名'@'IP地址' identified by '密码'; 说明:IP地址是用来限制用户只能在哪 ...

  7. HDU 2522 A simple problem (模拟)

    题目链接 Problem Description Zty很痴迷数学问题..一天,yifenfei出了个数学题想难倒他,让他回答1 / n.但Zty却回答不了^_^. 请大家编程帮助他. Input 第 ...

  8. MSSQL-SELECT&UPDATE动作要申请的锁

    最近在学习[MySQL事务&锁]这块知识,一不留神和MSSQL乱窜了~.~ 文章最初是想查看MySQL vs MSSQL在下面环境产生的阻塞现象会话1开启事务更新数据尚未提交->会话2读 ...

  9. ubuntu14.04 安装Kdevelop 进行ROS开发

    1. 安装gcc sudo apt-get build-dep gcc sudo apt-get install build-essential  2. 安装Kdevelop sudo apt-get ...

  10. Eclipse中项目不会自动编译问题的坑和注意点

    最近接受了几个又小有老的项目,用eclipse反而比idea方便,但是好长时间不用eclipse了,还有有些问题的! 主要是碰到了classnotfound这个难缠的问题:这里记录一下几个坑,避免以后 ...