Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests【二分法+01分数规划】
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分数规划】相关推荐
- 【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 ...
- poj2976 Dropping tests(01分数规划 好题)
https://vjudge.net/problem/POJ-2976 又是一波c++AC,g++WA的题.. 先推导公式:由题意得 Σa[i]/Σb[i]<=x,二分求最大x.化简为Σ(a[i ...
- 二分+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} ...
- 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 ...
- poj2976(0-1分数规划)
0-1分数规划 设x[i]等于1或0. 则我们所求的比率 rate = ∑(cost[i] * x[i]) / ∑(cost[i] * x[i]), 0≤i<m . z( rate ) = ∑( ...
- POJ-2976 Dropping tests 01分数规划
题目链接:http://poj.org/problem?id=2976 很典型的01分数规划,sort+二分即可.注意精度问题,这种四舍五入的问题一般都是两种处理方法:1.printf("% ...
- POJ2976:Dropping tests——题解
http://poj.org/problem?id=2976 题目大意:给定n个二元组(a,b),从中取n-k个,使得100*∑a/∑b最大. 01分数规划裸题,设λ是小于等于最优解的,那么λ< ...
- poj 2976 Dropping tests 01分数规划
题目大意: http://poj.org/problem?id=2976 题解: 裸的01分数规划 #include <cstdio> #include <cstring> # ...
- POJ3111 K Best —— 01分数规划 二分法
题目链接:http://poj.org/problem?id=3111 K Best Time Limit: 8000MS Memory Limit: 65536K Total Submissio ...
最新文章
- php global 作用,PHP关键字global在定义变量中的作用_PHP教程
- ShardingSphere 系列
- Enterprise Library: Configuration Application Block类设计分析篇
- Java怎么查找字符串大写_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
- 【译】在 Linux 上不安装 Mono 构建 .NET Framework 类库
- numpy将ndarray数据拼接合并
- ode45 matlab 出错,请问,Matlab用ODE45解微分方程,出错
- RTTI机制(运行时类型识别)
- Java突击学习 Day2 Part1
- 使用 jsbarcode 生成条形码
- Flink 第8.2章 Flink 的键组 KeyGroup 与 缩放 Rescale
- 为什么Java小伙对JavaScript和Node.js如此兴奋?
- Python 集和篇
- 调整IT外包业务合同 降低外包价格
- C/C++ int数组初始化
- Python爬虫之协程
- 无线安全-WiFi渗透流程
- Python语言画蓝色妖姬
- iOS 【适配iPhone XR/iPhone XS Max】
- 蓝牙认证(BQB、FCC)