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\n",100*mid);

    }

}
View Code

 

 

你可能感兴趣的:(test)