poj 2976 Dropping tests 0/1分数规划

0/1分数规划问题,用二分解决!!

代码如下:

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#define pi acos(-1.0)
using namespace std;
double a[1001],b[1001],an[1001];
int main()
{
    int i,j,k,n;
    double l,r,sum,mid;
    while(cin>>n>>k){
        if(n==0&&k==0) break;
        for(i=0;i<n;i++) cin>>a[i];
        for(i=0;i<n;i++) cin>>b[i];
        l=0.0;r=1.0;
        while(r-l>1e-8){
            mid=(l+r)/2.0;
            for(i=0;i<n;i++)
                an[i]=a[i]-mid*b[i];
            sort(an,an+n);
            sum=0;
            for(i=k;i<n;i++)
                sum+=an[i];
            if(sum>0) l=mid;
            else r=mid;
        }
        printf("%.0f
",100*mid);
    }
}
View Code

原文地址:https://www.cnblogs.com/xin-hua/p/3233716.html