4145:放弃考试
总时间限制: 1000ms 内存限制: 65536kB
描述
在一门课程中,一共有n场考试。假如你在i场考试中可以答对bi道题中的ai道,那么你的累计平均分定义为:100·Σai/Σbi。已知你这i场考试的答题情况,并且允许你放弃其中的k场考试,请你确定你最高能够得到多少的累计平均分。

假设该课程一共有3门考试,你的答题情况为5/5,0/1和2/6。如果你每门都参加,你的累计平均分为100·(5+0+2)/(5+1+6)= 50分。如果你放弃第3场考试,你的累计平均分则提高到了100·(5+0)/(5+1)= 83.33 ≈ 83分。

输入
有多组测试数据,每组测试数据包括3行。
每组测试数据第一行有两个数n和k,接下来一行有n个数ai,最后一行n个数bi。
(1 ≤ k < n ≤ 1000) (1 ≤ ai ≤ bi ≤ 1, 000, 000, 000)。
输入的最后一行为0 0,不作处理。
输出
输出最高的累计平均分。(四舍五入到整数)
样例输入
3 1
5 0 2
5 1 6
4 2
1 2 7 9
5 6 7 9
0 0
样例输出
83
100

来源
http://poj.org/problem?id=2976

问题链接:Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests
问题简述:给定n和k,有n场考试,给出每场答对的题数a和这场一共有几道题b,计算去掉k场考试后,公式100·Σai/Σbi的最大值。
问题分析
    01分数规划问题:给定价值a[i]和代价b[i],选举n-k个物品,使得总价值/总代价最大。那么算出Σai-xΣbi,去掉k个最小的即可(贪心法)。
    需要注意,上式中,因为Σai/Σbi>x相当于Σai-xΣbi>0。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests */#include <iostream>
#include <algorithm>
#include <cstdio>using namespace std;const double EPS = 1e-4;
const int N = 1000;
int n, k, a[N], b[N];
double y[N];bool judge(double x) {for(int i = 0; i < n; i++) y[i] = a[i] - x * b[i];sort(y, y + n);double sum = 0;for(int i = n - 1; i >= k; i--) sum += y[i];return sum >= 0;
}double bs()
{double left = 0, right = 1, mid;while(right - left > EPS) {mid = left + (right - left) / 2;if(judge(mid)) left = mid;else right = mid;}return mid * 100;
}int main()
{while(~scanf("%d%d", &n, &k) && (n || k)) {for(int i = 0; i < n; i++) scanf("%d", &a[i]);for(int i = 0; i < n; i++) scanf("%d", &b[i]);printf("%.0f\n", bs());}return 0;
}

Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests【二分法+01分数规划】相关推荐

  1. 【POJ - 2976】【ZOJ - 3068】【SCU - 2992】Dropping tests (01分数规划)

    题干: In a certain course, you take n tests. If you get ai out of bi questions correct on test i, your ...

  2. poj2976 Dropping tests(01分数规划 好题)

    https://vjudge.net/problem/POJ-2976 又是一波c++AC,g++WA的题.. 先推导公式:由题意得 Σa[i]/Σb[i]<=x,二分求最大x.化简为Σ(a[i ...

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

    题意: 给你若n个分数,分子a[i]a[i]a[i],分母b[i]b[i]b[i],使满足公式100⋅∑i=1nai∑i=1nbi100\cdot\tfrac{\sum_{i=1}^{n} a_{i} ...

  4. poj2976(0-1 分数规划)

    poj2976(0-1 分数规划) 题意 给定n个二元组 ( a i , b i ) (a_{i},b_{i}) (ai​,bi​)除去n个,剩下的n-k组成集合S作 ∑ i ∈ S a i ∑ i ...

  5. poj2976(0-1分数规划)

    0-1分数规划 设x[i]等于1或0. 则我们所求的比率 rate = ∑(cost[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m . z( rate ) = ∑( ...

  6. POJ-2976 Dropping tests 01分数规划

    题目链接:http://poj.org/problem?id=2976 很典型的01分数规划,sort+二分即可.注意精度问题,这种四舍五入的问题一般都是两种处理方法:1.printf("% ...

  7. POJ2976:Dropping tests——题解

    http://poj.org/problem?id=2976 题目大意:给定n个二元组(a,b),从中取n-k个,使得100*∑a/∑b最大. 01分数规划裸题,设λ是小于等于最优解的,那么λ< ...

  8. poj 2976 Dropping tests 01分数规划

    题目大意: http://poj.org/problem?id=2976 题解: 裸的01分数规划 #include <cstdio> #include <cstring> # ...

  9. POJ3111 K Best —— 01分数规划 二分法

    题目链接:http://poj.org/problem?id=3111 K Best Time Limit: 8000MS   Memory Limit: 65536K Total Submissio ...

最新文章

  1. php global 作用,PHP关键字global在定义变量中的作用_PHP教程
  2. ShardingSphere 系列
  3. Enterprise Library: Configuration Application Block类设计分析篇
  4. Java怎么查找字符串大写_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
  5. 【译】在 Linux 上不安装 Mono 构建 .NET Framework 类库
  6. numpy将ndarray数据拼接合并
  7. ode45 matlab 出错,请问,Matlab用ODE45解微分方程,出错
  8. RTTI机制(运行时类型识别)
  9. Java突击学习 Day2 Part1
  10. 使用 jsbarcode 生成条形码
  11. Flink 第8.2章 Flink 的键组 KeyGroup 与 缩放 Rescale
  12. 为什么Java小伙对JavaScript和Node.js如此兴奋?
  13. Python 集和篇
  14. 调整IT外包业务合同 降低外包价格
  15. C/C++ int数组初始化
  16. Python爬虫之协程
  17. 无线安全-WiFi渗透流程
  18. Python语言画蓝色妖姬
  19. iOS 【适配iPhone XR/iPhone XS Max】
  20. 蓝牙认证(BQB、FCC)

热门文章

  1. 2019-07-18
  2. 有关 strongSwan 的英文文档
  3. 插入始终是1_插入式电磁流量计的安装说明
  4. 操作系统_图解deepin操作系统安装,体验定制版的国产操作系统
  5. html5 矩阵转换,功能HTML5矩阵变换
  6. android5.1禁用通知栏,android-阻止通知栏
  7. Ecology 查询某人所有流程待办事项
  8. Idea部署web项目 与 eclipse 的不同之处
  9. css背景透明度不影响文字_唯美文字背景图 | 生活不一定很酷
  10. spark加载数据的方式