poj2976Dropping tests (二分搜索+还是涉及昨天遇见的o1分数规划)
今年有 n 场 ACM-ICPC 竞赛,小明每场都有资格参加。第 i 场竞赛共有 b[i] 道题。小明预测第 i 场他能做出 a[i] 道题。为了让自己看着更“大佬”一些,小明想让自己平均做出的题数越大越好,也就是最大化大佬度,大佬度的定义如下:
为了达到这个目的,小明决定放弃 k 场比赛的参赛资格。请求出最大的大佬度。
例如有 3 场小型比赛,题数分别是 5 题、1 题、6 题,小明预测自己分别能做出 5 题、0题、2题。如果每场都参加,那么大佬度是 ,看着不怎么大佬。不过,如果放弃第 3 场比赛,那么大佬度就是 ,看着更加大佬了。
Input
输入测试文件含有多组测试,每组有 3 行。第一行有 2 个整数, 1 ≤ n ≤ 1000 和 0 ≤ k < n。第二行有 n 个整数,即每个 a[i]。第三行含有 n 个正整数 b[i]。保证 0 ≤ a[i] ≤ b[i] ≤ 1, 000, 000, 000。文件末尾由 n = k = 0 标识,并且不应该被处理。
Output
对于每组测试数据,输出一行整数,即放弃 k 场比赛后可能的最高大佬度。大佬度应该舍入到最近的整数。
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
为了避免舍入误差带来的二义性,所有答案与除法边界相差至少 0.001 (例如答案永远不可能出现 83.4997)。
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{int n,k;while(scanf("%d%d",&n,&k)&&n){double a[1000],b[1000];for(int i=0;i<n;++i)scanf("%lf",&a[i]);//能做for(int i=0;i<n;++i)scanf("%lf",&b[i]);//有多少double low=0.0,high=100.0,mid,ant;while(high-low>0.00001){double c[1000];ant=0;mid=low+(high-low)/2.0;for(int i=0;i<n;++i)c[i]=a[i]-mid*b[i];sort(c,c+n);for(int i=k;i<n;++i)ant+=c[i];if(ant>0)low=mid;elsehigh=mid;}printf("%.0f\n",mid*100);// cout<<mid<<endl;}return 0;
}
开始只用了二分搜索,TLE了
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{int n,k;while(scanf("%d%d",&n,&k)&&n){int a[1000],b[1000];int c[1000];for(int i=0;i<n;++i){scanf("%d",&a[i]);//能做c[i]=i;}for(int i=0;i<n;++i)scanf("%d",&b[i]);//有多少double low=0.0,high=100,mid,ant=0;while(high-low>0.1){mid=low+(high-low)/2.0;do{double aa=0,bb=0,ans;for(int i=0;i<n-k;++i){aa+=a[c[i]];// cout<<c[i]<<' ';}// cout<<endl;for(int i=0;i<n-k;++i)bb+=b[c[i]];ans=100*(1.0*aa/bb)*1.0;if(ans>ant){ant=ans;// cout<<ant<<endl;}}while(next_permutation(c,c+n));if(ant>=mid)low=mid;elsehigh=mid;}printf("%.0lf\n",ant);//cout<<ant<<endl;}return 0;
}
poj2976Dropping tests (二分搜索+还是涉及昨天遇见的o1分数规划)相关推荐
- 二分+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} ...
- 【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 ...
- Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests【二分法+01分数规划】
4145:放弃考试 总时间限制: 1000ms 内存限制: 65536kB 描述 在一门课程中,一共有n场考试.假如你在i场考试中可以答对bi道题中的ai道,那么你的累计平均分定义为:100·Σai/ ...
- POJ2976——Dropping tests(0/1分数规划)
传送门 最简单的分数规划 对于最终答案ans,有 ans=Σai∗100Σbians=\frac{Σa_i*100}{Σb_i}ans=ΣbiΣai∗100 则 Σbi∗ans=Σai∗100Σ ...
- poj2976 Dropping tests(01分数规划 好题)
https://vjudge.net/problem/POJ-2976 又是一波c++AC,g++WA的题.. 先推导公式:由题意得 Σa[i]/Σb[i]<=x,二分求最大x.化简为Σ(a[i ...
- POJ-2976 Dropping tests 01分数规划
题目链接:http://poj.org/problem?id=2976 很典型的01分数规划,sort+二分即可.注意精度问题,这种四舍五入的问题一般都是两种处理方法:1.printf("% ...
- poj 2976 Dropping tests 01分数规划
题目大意: http://poj.org/problem?id=2976 题解: 裸的01分数规划 #include <cstdio> #include <cstring> # ...
- POJ2976-Dropping tests-01分数规划
关于01分数规划可以看这里,讲的很清楚:http://blog.csdn.net/hhaile/article/details/8883652 二分的思想,每次只要选取最大的N-K个d[i],如果可以 ...
- 【算法总结】二分搜索
一. STL函数 lower_bound() 试图在已排序的 [first, last) 中寻找元素 value.返回一个迭代器,指向第一个"不小于 value"的元素,如果 va ...
最新文章
- Deep learning调参经验
- 比特币现金基金会和Yeewallet达成合作,助力BCH传播
- 10.Verilog状态机使用方法
- sql server数据库课程设计分析
- 8.0强行转换后变成了7_如何在服务器上安装SSL证书,让你的网站变成https
- SSM 整合开发初见面
- 干的漂亮!一夜之间GPS在南海信号全无,美军只能干瞪眼
- 高质量的用户体验 推进IT运维向业务服务转变——中国移动通信集团公司
- Docker-compose部署gitlab中文版
- 固高GTS运动控制卡,C#语言三轴点胶机样本程序源代码
- vc830l 说明书_数字万用表vc830l视频教程 视频
- 清除Chrome的缓存、Cookie
- 【信息系统项目管理师】第二十一章 项目组合管理(考点汇总篇)
- JLINK仿真器来仿真调试mini2440
- 给我5个带”一“字的成语
- matlab乖离率计算,终于有人把“乖离率”说清楚了,看懂少走十年弯路!
- ZbxTable 2.0 重磅发布!6大主要优化功能!
- 单目多帧自监督深度估计(2021-2022)研究进展
- Android 常用技术
- c语言时钟程序整点报时,单片机开发的(带整点报时、音乐闹钟)电子时钟(一)...