码迷,mamicode.com
首页 > 其他好文 > 详细

[poj2976]Dropping tests(01分数规划,转化为二分解决)

时间:2019-02-05 23:56:12      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:typedef   公式   gif   math   nbsp   img   解决   bre   alt   

题意:有n场考试,给出每场答对的题数a和这场一共有几道题b,求去掉k场考试后,公式技术图片.的最大值

解题关键:01分数规划,double类型二分的写法(poj崩溃,未提交)

或者r-l<=1e-3(右边是精度)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
#define maxn 1002
#define eps 1e-8
using namespace std;
typedef long long ll;
int n,k;
double ans;
struct node{
    int a,b;
}num[maxn];
bool cmp(node &x,node &y){
    return x.a-x.b*ans>y.a-y.b*ans;
}
bool check(double x){
    ans=x;
    sort(num+1,num+n+1,cmp);
    double sum=0;
    for(int i=1;i<=n-k;i++) sum+=num[i].a-x*num[i].b;
    return sum>=-eps;
}
double erfen(double l,double r){
    for(int i=1;i<=1000;i++){
        double mid=(l+r)/2;
        if(check(mid)) l=mid;
        else r=mid;
    }
    return r;
}
int main(){
    while(cin>>n>>k){
        if(!n&&!k) break;
        for(int i=1;i<=n;i++) cin>>num[i].a;
        for(int i=1;i<=n;i++) cin>>num[i].b;
        double ans=erfen(0,1.0*(ll)100000000000);
        cout<<(int)(100*ans)<<"\n";
        //printf("%d\n",(int)ans);
    }

    return 0;
}

 

[poj2976]Dropping tests(01分数规划,转化为二分解决)

标签:typedef   公式   gif   math   nbsp   img   解决   bre   alt   

原文地址:https://www.cnblogs.com/elpsycongroo/p/10353324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!