公式:r=sigam(a[i]*x[i])/sigam(b[i]*x[i]) ,i被选x[i]==1 否则 x[i]==0;
设f(L)=sigam(a[i]*x[i])-L*sigma(b[i]*x[i]), 易知L为所求r, 求L最大;
f(L)随L增大而递减;
当f(L)>0==>sigam(a[i]*x[i])/sigam(b[i]*x[i])>L. 我们此时选的L更优;
当==0时,L最优,所以二分L即可
#include <iostream>
#include <algorithm>
#include <stdio.h>
#define eps 1e-7
using namespace std;
const int maxn=1e3+10;
double a[maxn],b[maxn];
int main()
{
int n,k;
while (scanf("%d%d",&n,&k)!=EOF)
{
double sum,mid;
if (n==0&&k==0)
break;
for (int i=1;i<=n;i++)
scanf("%lf",&a[i]);
for (int j=1;j<=n;j++)
scanf("%lf",&b[j]);
double l=0.0,r=1.0;
double s[maxn];
while (l+eps<r)
{
sum=0;
mid=(l+r)*1.0/2;
for (int i=1;i<=n;i++)
s[i]=a[i]-mid*b[i];
sort(s+1,s+1+n);
for (int i=k+1;i<=n;i++)
sum+=s[i];
if (sum>=0)
l=mid;
else
r=mid;
}
printf("%.0f\n",l*100);
}
return 0;
}