POJ2976:Dropping tests(01分数规划入门)
In a certain course, you take n tests. If you get ai out of bi questions correct on test i, your cumulative average is defined to be
.
Given your test scores and a positive integer k, determine how high you can make your cumulative average if you are allowed to drop any k of your test scores.
Suppose you take 3 tests with scores of 5/5, 0/1, and 2/6. Without dropping any tests, your cumulative average is . However, if you drop the third test, your cumulative average becomes 
.
Input
The input test file will contain multiple test cases, each containing exactly three lines. The first line contains two integers, 1 ≤ n ≤ 1000 and 0 ≤ k < n. The second line contains n integers indicating ai for all i. The third line contains n positive integers indicating bi for all i. It is guaranteed that 0 ≤ ai ≤ bi ≤ 1, 000, 000, 000. The end-of-file is marked by a test case with n = k = 0 and should not be processed.
Output
For each test case, write a single line with the highest cumulative average possible after dropping k of the given test scores. The average should be rounded to the nearest integer.
Sample Input
3 1
5 0 2
5 1 6
4 2
1 2 7 9
5 6 7 9
0 0
Sample Output
83
100
Hint
To avoid ambiguities due to rounding errors, the judge tests have been constructed so that all answers are at least 0.001 away from a decision boundary (i.e., you can assume that the average is never 83.4997).
题意:有几门成绩,现在要求选N-K门,使得平均成绩最高,求最高平均成绩。
思路:01分数规划。
有三种需要掌握的01分数规划,之前最大流的时候遇到过,现在有些想法,有空再来实现。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const double eps=1e-;
int N,K;
struct in
{
double x,y;
double res;
bool friend operator <(in a,in b){
return a.res>b.res;
}
}a[];
bool check(double Mid)
{
for(int i=;i<=N;i++) a[i].res=a[i].x-Mid*a[i].y;
sort(a+,a+N+);
double tx=;
for(int i=;i<=K;i++) tx+=a[i].res;
if(tx>=-eps) return true;
return false;
}
int main()
{
while(~scanf("%d%d",&N,&K)&&(N||K)){
K=N-K;
for(int i=;i<=N;i++) scanf("%lf",&a[i].x),a[i].x*=100.0;
for(int i=;i<=N;i++) scanf("%lf",&a[i].y);
double L=,R=,Mid,ans=;
while(R-L>eps){
Mid=(L+R)/;
if(check(Mid)) ans=Mid,L=Mid+eps;
else R=Mid-eps;
}
printf("%.0lf\n",ans);
}
return ;
}
POJ2976:Dropping tests(01分数规划入门)的更多相关文章
- [poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)
		题意:有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式.的最大值 解题关键:01分数规划,double类型二分的写法(poj崩溃,未提交) 或者r-l<=1e-3(右 ... 
- POJ2976 Dropping tests —— 01分数规划 二分法
		题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ... 
- POJ2976 Dropping tests(01分数规划)
		题意 给你n次测试的得分情况b[i]代表第i次测试的总分,a[i]代表实际得分. 你可以取消k次测试,得剩下的测试中的分数为 问分数的最大值为多少. 题解 裸的01规划. 然后ans没有清0坑我半天. ... 
- POJ2976 Dropping tests 01分数规划
		裸题 看分析请戳这里:http://blog.csdn.net/hhaile/article/details/8883652 #include<stdio.h> #include<a ... 
- Dropping tests(01分数规划)
		Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8176 Accepted: 2862 De ... 
- POJ 2976 Dropping tests 01分数规划 模板
		Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6373 Accepted: 2198 ... 
- POJ 2976 Dropping tests 01分数规划
		给出n(n<=1000)个考试的成绩ai和满分bi,要求去掉k个考试成绩,使得剩下的∑ai/∑bi*100最大并输出. 典型的01分数规划 要使∑ai/∑bi最大,不妨设ans=∑ai/∑bi, ... 
- $POJ$2976 $Dropping\ tests$ 01分数规划+贪心
		正解:01分数规划 解题报告: 传送门! 板子题鸭,,, 显然考虑变成$a[i]-mid\cdot b[i]$,显然无脑贪心下得选出最大的$k$个然后判断是否大于0就好(,,,这么弱智真的算贪心嘛$T ... 
- POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))
		题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ... 
- 【POJ2976】Dropping tests  - 01分数规划
		Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ... 
随机推荐
- Struts2牛逼的拦截器,卧槽这才是最牛的核心!
			struts 拦截器 一 拦截器简介及简单的拦截器实例 Struts2拦截器是在访问某个Action或者Action的某个方法,在字段前或者之后实施拦截,并且Struts2拦截器是可以插拔的,拦截器是 ... 
- Centos7 下的防火墙端口配置
			如果外部不能访问,需要查看防火墙以及服务器的端口安全设置. 防火墙的操作 查看所有打开的端口: firewall-cmd --zone=public --list-ports 添加 firewall- ... 
- Ubuntu 16.04安装CrossOver容器来安装QQ(终极解决办法,亲测有效)
			说明:此版本的QQ基本完美,但是有个缺点就是历史记录有些会显示乱码! 注意:此方法能完美解决这篇文章http://www.cnblogs.com/EasonJim/p/7118693.html的所有问 ... 
- vSphere 6.5 新功能 (7) - 支持 512e 硬盘
			2016-12-11 Newton 长期以来,机械硬盘在储存数据时,一直都是以 512 byte 大小的扇区(Sector)为单位分割进行读写.随着硬盘容量的不断提升,这种古老的分配标准已经越来越不合 ... 
- java验证身份证号码是否有效源代码 wn25的头像 wn25 23  2015-01-04 20:09  6  基本信息 Java × 1     浏览
			原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ... 
- 如何删除xcode启动主页面项目列表
			Open Xcode, leave the splash screen up and choose "File", "Open Recent Projects" ... 
- Oracle释放高水位线
			/*****************************************************************原因:由于原导出数据库没有整理表空间其中主要包括两方面,一是用户产生 ... 
- python远程访问hive
			#!/usr/bin/pythonimport syssys.path.append('/home/zhoujie/Downloads/hive-0.7.0-cdh3u0/lib/py')from h ... 
- fedora关闭防火墙
			sudo systemctl stop iptables sudo sytemctl stop firewalld 
- [NPM] Set default values for package.json using npm set
			Npm by default uses global values when initializing a new package.json file. Learn how to set your o ... 
