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 ...
随机推荐
- ios NSFileManager 用法详解
转自:http://blog.csdn.net/ios_che/article/details/7287266 iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过ipho ...
- Mysql数据类型简介(大概了解)
知道有整型,浮点型,定点数类型( DECIMAL(M,D)M是数据总长度,是小数位 ),日期类,字符串类,二进制类型(存图片路径,视频路径一般用BLOG就行了喔)……不会再去查 讲一下几个专有名词: ...
- “玲珑杯”ACM比赛 Round #5 H -- Variance 简单树状数组
可以把每个公式都化简,然后得到要维护的东西就是平方和,和前缀和,两个bit即可 不能cin,超时.IOS后都不行. scanf用lld #include <cstdio> #include ...
- MySQL防止重复插入记录SQL
INSERT INTO sysuser(') DUAL:表示虚拟表 sysuser:表名称
- PHP实现XML传输
sendXML.php <!--发送XML的页面--> <?php $xml_data = '<xml>...</xml>';//发送的xml $url ...
- ES6初探——编译环境搭建
不好意思我又要来写操作文档了,看起来更像wiki的博客(如果你想深入学习,请阅读文末列的参考资料).本文将示例如何把ES6编译成ES5. 首先,你要自行查阅什么是ES6,和ES5.javascript ...
- T4312 最大出栈顺序
题目描述 给你一个栈和n个数,按照n个数的顺序入栈,你可以选择在任何时候将数 出栈,使得出栈的序列的字典序最大. 输入输出格式 输入格式: 输入共2行. 第一行个整数n,表示入栈序列长度. 第二行包含 ...
- checkbox:全选、全不选、单选(慕课网题目)
任务 1.在第27行处补充完整,实现当点击"全选"按钮时,将选中所有的复选项. 提示:document.getElementsByTagName("input" ...
- MSComDlg.CommonDialog服务器不能创建对象错误的解决
作者:朱金灿 来源:http://blog.csdn.net/clever101 在JavaScript中弹出打开文件对话框,代码如下: var fileOpenDlg = new ActiveXOb ...
- iOS开发内购全套图文教程
2015年最全的内购图文教程,首先是填各种资料,最后是代码,废话不多说,直接上图 ======================第一部分协议=============== 第一步 第二步 第三步 第四步 ...