题意:有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算法)的更多相关文章

  1. POJ2976 Dropping tests —— 01分数规划 二分法

    题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  2. POJ2976 Dropping tests(01分数规划)

    题意 给你n次测试的得分情况b[i]代表第i次测试的总分,a[i]代表实际得分. 你可以取消k次测试,得剩下的测试中的分数为 问分数的最大值为多少. 题解 裸的01规划. 然后ans没有清0坑我半天. ...

  3. POJ2976 Dropping tests 01分数规划

    裸题 看分析请戳这里:http://blog.csdn.net/hhaile/article/details/8883652 #include<stdio.h> #include<a ...

  4. Dropping tests(01分数规划)

    Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8176   Accepted: 2862 De ...

  5. POJ 2976 Dropping tests 01分数规划 模板

    Dropping tests   Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6373   Accepted: 2198 ...

  6. POJ 2976 Dropping tests 01分数规划

    给出n(n<=1000)个考试的成绩ai和满分bi,要求去掉k个考试成绩,使得剩下的∑ai/∑bi*100最大并输出. 典型的01分数规划 要使∑ai/∑bi最大,不妨设ans=∑ai/∑bi, ...

  7. $POJ$2976 $Dropping\ tests$ 01分数规划+贪心

    正解:01分数规划 解题报告: 传送门! 板子题鸭,,, 显然考虑变成$a[i]-mid\cdot b[i]$,显然无脑贪心下得选出最大的$k$个然后判断是否大于0就好(,,,这么弱智真的算贪心嘛$T ...

  8. POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))

    题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...

  9. 【POJ2976】Dropping tests - 01分数规划

    Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...

随机推荐

  1. 去掉标题栏的方法(使用requestWindowFeature(Window.FEATURE_NO_TITLE);为什么失效?不仅失效,可能会挂)

    使用requestWindowFeature(Window.FEATURE_NO_TITLE)隐藏标题栏失效的原因,不仅失效,可能会挂.可能是activity继承的是AppCompatActivity ...

  2. Linux下tar命令的各种参数选项和他们的作用整理

    1.建立TAR包(打包)命令格式:tar cvf TAR包文件名.tar 所备份的文件或目录功能描述:tar cvf命令用于把指定的目录或文件打包到指定的文件中.“c”指定建立(或压缩)TAR包,“v ...

  3. php 5.6以上可以采用new PDD连接数据库的方法。

    <?php// @mysqli_connect($db=localhost,// $_cont['root'],// $_cont['root'],// $_cont['demo'],// $_ ...

  4. 分布式事务_03_2PC框架raincat源码解析-事务提交过程

    一.前言 前面两节,我们已经将raincat的demo工程启动,并简单分析了下事务协调者与事务参与者的启动过程. 这一节,我们来看下raincat的事务提交过程. 二.事务提交过程概览 1.二阶段对应 ...

  5. jquery 获取所有父元素

    最终结果: 代码: <!DOCTYPE html> <html> <head> <style> b, span, p, html body { padd ...

  6. tensorflow中使用tf.ConfigProto()配置Session运行参数&&GPU设备指定

    tf.ConfigProto()函数用在创建session的时候,用来对session进行参数配置: config = tf.ConfigProto(allow_soft_placement=True ...

  7. [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件

    [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件 http://laravelacademy.org/post/7812.html 简介 中间件为过滤进入应用的 ...

  8. Nginx理解

    说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了.摘一段百度百科上的描述: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后 ...

  9. Python collections系列之有序字典

    有序字典(orderedDict ) orderdDict是对字典类型的补充,他记住了字典元素添加的顺序 1.创建一个有序字典 import collections dic = collections ...

  10. 用PHP编写登陆界面

    网页的编写用PHP最方便.用php做了最简单的用户登录.创建的程序. 一. MySQL的设计 MySQL设计了两个表:members和sex.两张表的创建语句分别是: create table mem ...