[poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)
题意:有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式
.的最大值
解题关键:01分数规划,double类型二分的写法(poj崩溃,未提交)
或者r-l<=1e-3(右边是精度)
为什么v-xw>=0?(v/x>=x?)
ans要求的是最大值,我们定义:c(x)可以选择使得单位重量的价值>=x,最大值一定满足此函数,此函数关于x单调递减,可以求得一个最大值。求得的x的最大值即是ans。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define maxn 1006
#define eps 1e-8
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
int n,k;
double ans;
struct node{
double a,b;
}num[maxn];
bool cmp(const node &x,const node &y){
return x.a-x.b*ans>=y.a-y.b*ans;
}
bool check(double x){
ans=x;
sort(num+,num+n+,cmp);
double sum=;
for(int i=;i<=n-k;i++) sum+=num[i].a-x*num[i].b;
return sum>=-eps;
} double erfen(double l,double r){
while(r-l>eps){//for(int i=1;i<=100;i++)
double mid=(l+r)/;
if(check(mid)) l=mid;
else r=mid;
}
return r;
} int main(){
while(scanf("%d%d",&n,&k)!=EOF&&(n||k)){
for(int i=;i<=n;i++) scanf("%lf",&num[i].a);
for(int i=;i<=n;i++) scanf("%lf",&num[i].b);
double ans=erfen(,1.0*inf);
printf("%.0lf\n",*ans);//必须四舍五入
//printf("%d\n",(int)(100*ans+0.5));
}
return ;
}
2、Dinkelbach算法(原理上比二分更快,因为利用了当前直线所对应的解)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define eps 1e-8
using namespace std;
typedef long long ll;
double a[],b[]; struct node{
double num;
int ord;
}d[]; bool cmp(node a,node b){
return a.num>b.num;
} int main(){
int n,k;
while(scanf("%d%d",&n,&k)&&(n||k)){
for(int i=;i<n;i++)scanf("%lf",&a[i]);
for(int i=;i<n;i++)scanf("%lf",&b[i]);
double l=0.0,ans;
while(){
ans=l;
for(int i=;i<n;i++){
d[i].num=a[i]-ans*b[i];
d[i].ord=i;
}
sort(d,d+n,cmp);
double p=0.0,q=0.0;
for(int i=;i<n-k;i++){
p+=a[d[i].ord];
q+=b[d[i].ord];
}
l=p/q;
if(fabs(ans-l)<eps)
break;
}
if(ans>)ans=;
if(ans<)ans=;
printf("%.0f\n",*ans);
}
return ;
}
[poj2976]Dropping tests(01分数规划,转化为二分解决或Dinkelbach算法)的更多相关文章
- 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 ...
随机推荐
- web测试中的测试点和测试方法总结
测试是一种思维,包括情感思维和智力思维,情感思维主要体现在一句俗语:思想决定行动上(要怀疑一切),智力思维主要体现在测试用例的设计上.具有了这样的思想,就会找出更多的bug. 一.输入框 1.字符 ...
- Spring Boot配置文件详解:自定义属性、随机数、多环境配置
自定义属性与加载 我们在使用Spring Boot的时候,通常也需要定义一些自己使用的属性,我们可以如下方式直接定义: application-dev.yml com.didispace.blog: ...
- Shiro安全配置
主要还是整合了本地ehcache,集群session管理过段时间放出 <?xml version="1.0" encoding="UTF-8"?> ...
- iOS 检查指定日期是否在当前日期之前
iOS检查指定日期是否在当前日期之前, 直接上代码: - (BOOL)checkProductDate: (NSString *)tempDate { NSDateFormatter *dateFor ...
- JProfiler连接weblogic
转 http://blog.csdn.net/xu1314/article/details/7737236
- Ubuntu下使用tmux实现分屏,以及tmux快捷键
最近用到了终端的复用,使用了tmux,写一下自己的使用和一些快捷键. tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件. 来个效果图: 截图我使用的命令是 gno ...
- 识别设备是IOS还是安卓
var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > - ...
- 20165210 学习基础和C语言基础调查
20165210 学习基础和C语言基础调查 一.技能学习过程和心得 读了娄老师<做中学>自己还是深有感受的,对于运动.音乐.棋牌都会一点,我觉得做中学可以概括为三点:做,学,学做结合,所谓 ...
- 树莓派(Linux)与镜像源
树莓派学习笔记--修改树莓派软件源 1. linux 镜像源文件 >> vim /etc/apt/sources.list 可在树莓派官网 http://www.raspbian.org/ ...
- bzoj4513 储能表
求 $\sum\limits_{i=0}^{n-1} \sum\limits_{j=0}^{m-1} max((x \space xor \space j) - k,0)$ ,膜 $p$ $n,m \ ...