题意:给了两个数组a,b,a[i]和b[i]是相对应的,不能改变位置,去掉其中的一些元素,然后计算最大的r=∑a[i]/∑b[i]
做法:最大的r要满足∑a[i]-r∑b[i]=0,如果r不是最大的则该式子大于0。然后对r(0.0<r<1.0)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=1005;
const double eps=1e-8;
double a[maxn],b[maxn],temp[maxn];
int n,k;
bool ok(double mid)
{
double ans=0;
sort(temp,temp+n);
for(int i=k;i<n;i++)
{
ans+=temp[i];
}
//printf("%.2f\n",ans);
if(ans>0)
return true;
else
return false;
}
void solve(double mid)
{
for(int i=0;i<n;i++)
temp[i]=a[i]-mid*b[i];
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==0)
break;
else
{
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i]);
}
for(int i=0;i<n;i++)
{
scanf("%lf",&b[i]);
}
double l=0.0,r=1.0,mid;
while(r-l>eps)
{
mid=(l+r)*1.0/2;
//printf("%.2f\n",mid);
solve(mid);
if(ok(mid)==true)
l=mid;
else
r=mid;
}
printf("%.0f\n",mid*100);
}
}
}