POJ 2976 Dropping test(01分数规划模板)
01分数划分详情可阅读:http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html
题意:
给出n个a和b,让选出n-k个使得最大
二分法:
- #include<cstdio>
- #include<iostream>
- #include<queue>
- #include<cstring>
- #include<string>
- #include<map>
- #include<vector>
- #include<algorithm>
- #define rep(i,a,b) for(int i = a; i < b; i++)
- #define _rep(i,a,b) for(int i = a; i <= b; i++)
- using namespace std;
- const int maxn = + ;
- const double inf = 1e9;
- const double eps = 1e-;
- double a[maxn] , b[maxn], d[maxn];
- int n, k;
- double check(double L){
- double sum = ;
- for(int i = ; i < n; i++) d[i] = a[i] - b[i] * L;
- sort(d,d+n);//由于都是可取的, 那么就取最大的k个, 使得F(L)尽量大
- rep(i,k,n) sum += d[i];
- return sum;
- }
- int main()
- {
- while(~scanf("%d %d", &n, &k) && n){
- rep(i,,n)scanf("%lf", &a[i]);
- rep(i,,n)scanf("%lf", &b[i]);
- double L = inf, R = -inf, Mid;
- for(int i = ;i < n; i++){
- L = min(a[i]/b[i], L); //如果求某些分数分子分母分别相加和最大, 那么这个和肯定小于等于某个分数
- R = max(a[i]/b[i], R); //如果求某些分数分子分母分别相加和最小, 那么这个和肯定小于等于某个分数
- }
- while( R - L > eps){
- Mid = L + (R-L)/;
- if(check(Mid) > ) //检查这个L值是否使F(L) = sigma(a[i] - L*b[i]) * ki取值为0(ki是取的k个数)
- L = Mid;
- else
- R = Mid;
- }
- printf("%.0f\n", L * );
- }
- return ;
- }
Dinkelbach
- #include<cstdio>
- #include<iostream>
- #include<queue>
- #include<cstring>
- #include<string>
- #include<map>
- #include<vector>
- #include<algorithm>
- #include<cmath>
- #define rep(i,a,b) for(int i = a; i < b; i++)
- #define _rep(i,a,b) for(int i = a; i <= b; i++)
- using namespace std;
- const int maxn = + ;
- const double inf = 1e9;
- const double eps = 1e-;
- struct node{
- double a, b, d;
- bool operator <(const node& x ) const{
- return d < x.d;
- }
- }arr[maxn];
- int n, k;
- double Dinkelbach()
- {
- double L,ans=; //L一开始随机赋值
- double x,y;
- while(){
- L = ans;
- for(int i=;i<n;i++)
- arr[i].d = arr[i].a - L * arr[i].b;
- sort(arr, arr + n);
- x=y=;
- for(int i=k;i<n;i++){
- x+=arr[i].a;
- y+=arr[i].b;
- }
- ans=x/y;//保存结果
- // printf("%.16f\n", ans);
- if(abs(L-ans) < eps) return L;
- }
- }
- int main()
- {
- // freopen("1.txt","r", stdin);
- while(~scanf("%d %d", &n, &k) && n){
- rep(i,,n)scanf("%lf", &arr[i].a);
- rep(i,,n)scanf("%lf", &arr[i].b);
- printf("%.0f\n", Dinkelbach()* );
- }
- return ;
- }
POJ 2976 Dropping test(01分数规划模板)的更多相关文章
- 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代表 ...
- POJ 2976 Dropping tests(分数规划)
http://poj.org/problem?id=2976 题意: 给出ai和bi,ai和bi是一一配对的,现在可以删除k对,使得的值最大. 思路: 分数规划题,可以参考<挑战程序竞赛> ...
- [poj 2976] Dropping tests (分数规划 二分)
原题: 传送门 题意: 给出n个a和b,让选出n-k个使得(sigma a[i])/(sigma b[i])最大 直接用分数规划.. code: //By Menteur_Hxy #include & ...
- POJ 2976 裸的01分数规划
题意:给你n个数对(认为是a数组和b数组吧),从中取n-m个数对,如果选第i个数对,定义x[i]=1,求R=∑(a[i]*x[i])/∑(b[i]*x[i])取得最大值时R的值.输出R*100(保留到 ...
- POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)
[题意]每条路径有一个 cost 和 dist,求图中 sigma(cost) / sigma(dist) 最小的生成树. 标准的最优比率生成树,楼教主当年开场随手1YES然后把别人带错方向的题Orz ...
- Dropping tests(01分数规划)
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8176 Accepted: 2862 De ...
- POJ 2728 Desert King (01分数规划)
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions:29775 Accepted: 8192 Descr ...
随机推荐
- win32 寄存器
跳转指令分三类: 一.无条件跳转: JMP ;无条件跳转 二.根据CX.ECX寄存器的值跳转: JCXZ ;CX 为 0 则跳转 JECXZ;ECX 为 0 则跳转 三.根据EFLAGS寄存器的PSW ...
- Codeforces Round #544 (Div. 3) D. Zero Quantity Maximization
链接:https://codeforces.com/contest/1133/problem/D 题意: 给两个数组a,b. 同时ci = ai * d + bi. 找到一个d使c数组中的0最多. 求 ...
- 学习JavaScript数据结构与算法 (二)
学习JavaScript数据结构与算法 的笔记 包含第四章队列, 第五章链表 本人所有文章首发在博客园: http://www.cnblogs.com/zhangrunhao/ 04队列 实现基本队列 ...
- 1-20StringBuffer简介
StringBuffer是一个字符串缓冲区,如果需要频繁的对字符串进行拼接时,建议使用StringBuffer. 工作原理 StringBuffer的底层是char数组,如果没有明确设定,则系统会默认 ...
- httpclient 3.1跳过https请求SSL的验证
一.因为在使用https发送请求的时候会涉及,验证方式.但是这种方式在使用的时候很不方便.特别是在请求外部接口的时候,所以这我写了一个跳过验证的方式.(供参考) 二.加入包,这里用的是commons- ...
- Super Mario 树状数组离线 || 线段树
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Error: IO_ERROR : java.io.IOException: Error while connecting Oozie server. No of retries = 5. Exception = Connection refused (Connection refused)解决办法(图文详解)
不多说,直接上干货! 问题详情 解决办法 Copy/Paste oozie.services property tag set from oozie-default.xml to oozie-site ...
- Suricata的Reputation
见官网 https://suricata.readthedocs.io/en/latest/reputation/index.html Docs » 9. Reputation Edit on Git ...
- P1615 西游记公司
题目背景 一道极其无厘头的题目 题目描述 事情是这样的:西游记中的孙沙猪(孙杀猪)三徒弟在西天取经之后开始进入厦门大学经贸系学习经济,在1个小时的学习后,他们用暴力手段毕业了.然后,他们创办了三个公司 ...
- 访问github.com太慢的解决方法
修改 c:\windows\system32\drivers\etc\host文件添加 192.30.255.112 github.com 151.101.72.249 github.global.s ...