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[],b[],an[];
int main()
{
int i,j,k,n;
double l,r,sum,mid;
while(cin>>n>>k){
if(n==&&k==) break;
for(i=;i<n;i++) cin>>a[i];
for(i=;i<n;i++) cin>>b[i];
l=0.0;r=1.0;
while(r-l>1e-){
mid=(l+r)/2.0;
for(i=;i<n;i++)
an[i]=a[i]-mid*b[i];
sort(an,an+n);
sum=;
for(i=k;i<n;i++)
sum+=an[i];
if(sum>) l=mid;
else r=mid;
}
printf("%.0f\n",*mid);
}
}