POJ 2976 Dropping tests:01分数规划【二分】
题目链接:http://poj.org/problem?id=2976
题意:
共有n场考试,每场考试你得的分数为a[i],总分为b[i]。
你可以任意去掉k场考试。
问你最大的 100.0 * ( ∑ a[i] / ∑ b[i] )的值。(四舍五入)
题解:
相当于从n场考试中选n-k场。
二分:
二分最大答案 ∑ a[i] / ∑ b[i] >= L
即:∑ a[i] - ∑(b[i]*L) >= 0
check函数:
求数组val[i] = a[i] - b[i]*L
将val排序。
取最大的n-k个val[i],求和为sum。
若sum >= 0则满足条件,lef = mid.
否则rig = mid.
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#define MAX_N 1005
#define INF 10000000
#define EPS 0.000001 using namespace std; int n,m;
double ans;
double a[MAX_N];
double b[MAX_N];
double val[MAX_N]; void read()
{
for(int i=;i<n;i++)
{
scanf("%lf",&a[i]);
}
for(int i=;i<n;i++)
{
scanf("%lf",&b[i]);
}
} bool is_legal(double x)
{
for(int i=;i<n;i++)
{
val[i]=a[i]-x*b[i];
}
sort(val,val+n);
double sum=;
for(int i=n-;i>=m;i--)
{
sum+=val[i];
}
return sum>=;
} void solve()
{
double lef=;
double rig=;
while(rig-lef>EPS)
{
double mid=(lef+rig)/2.0;
if(is_legal(mid)) lef=mid;
else rig=mid;
}
ans=lef;
} void print()
{
printf("%.0f\n",ans*100.0);
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n== && m==) break;
read();
solve();
print();
}
}
POJ 2976 Dropping tests:01分数规划【二分】的更多相关文章
- 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 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 (分数规划 二分)
原题: 传送门 题意: 给出n个a和b,让选出n-k个使得(sigma a[i])/(sigma b[i])最大 直接用分数规划.. code: //By Menteur_Hxy #include & ...
- POJ 2976 Dropping tests(分数规划)
http://poj.org/problem?id=2976 题意: 给出ai和bi,ai和bi是一一配对的,现在可以删除k对,使得的值最大. 思路: 分数规划题,可以参考<挑战程序竞赛> ...
- [poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)
题意:有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式.的最大值 解题关键:01分数规划,double类型二分的写法(poj崩溃,未提交) 或者r-l<=1e-3(右 ...
- Dropping tests(01分数规划)
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8176 Accepted: 2862 De ...
- POJ - 3111 K Best 0-1分数规划 二分
K Best Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 12812 Accepted: 3290 Case Time ...
- POJ2976 Dropping tests —— 01分数规划 二分法
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
随机推荐
- vue相关知识
1.看https://www.bilibili.com/video/av27969216/?p=54,看他的就够了 https://juejin.im/post/5a5bc8c36fb9a01ca26 ...
- git 安装方法
Windows上安装Git示例 在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可. 安装完成后,在开始菜单里找到“Git”-> ...
- Shell脚本之:if-else
Shell 有三种 if ... else 语句: 1.if ... fi 语句: 2.if ... else ... fi 语句: 3.if ... elif ... else ... fi 语句. ...
- JSON 值转换
var Txt = '{"a":"1","b":"5","c":"5",&quo ...
- 数据结构(Java语言)——Stack简单实现
栈是限制插入和删除仅仅能在一个位置上进行的表.该位置是表的末端,叫做栈的顶top.对栈的基本操作有进栈push和出栈pop,前者相当于插入.后者这是删除最后插入的元素. 栈有时又叫先进先出FIFO表. ...
- linux下网卡绑定
网卡绑定的作用:1.冗余,防止单点故障 2.防止传输瓶颈 1.交换机端口绑定: system-view link-aggregation group 1 mode manual 比如把端口1和2进行绑 ...
- [转]浅谈Flash Socket通信安全沙箱
用过Flash socket的同学都知道,Flash socket通讯有安全沙箱问题.就是在Flash Player发起socket通信时,会向服务端获取安全策略,如果得不到服务端响应,flash将无 ...
- NuGet管理工具安装
安装完成后VS重启即可
- 基于zookeeper或redis实现分布式锁
前言 在分布式系统中,分布式锁是为了解决多实例之间的同步问题.例如master选举,能够获取分布式锁的就是master,获取失败的就是slave.又或者能够获取锁的实例能够完成特定的操作. 目前比较常 ...
- ch.poweredge.ntlmv2-auth
<dependency> <groupId>ch.poweredge.ntlmv2-auth</groupId> <artifactId>ntlmv2- ...