最大化平均值,基本和书上的题型一模一样的,直接二分平均值就好了
#include<cstdio>
#include<algorithm>
using namespace std;
namespace
{
int n, k, a[1000], b[1000];
double d[1000];
const double eps = 0.0001;
bool check(double x)
{
for (int i = 0; i < n; i++)
d[i] = a[i] - x * b[i];
sort(d, d + n);
double sum = 0;
for (int i = 0; i < n - k; i++)
sum += d[n - 1 - i];
return sum >= 0;
}
void solve()
{
double lb = 0, ub = 1, mid;
while (ub - lb > eps)
{
mid = (ub + lb) / 2;
if (check(mid))
lb = mid;
else
ub = mid;
}
printf("%d\n", (int) (lb * 100 + 0.5));
}
}
int main()
{
while (scanf("%d %d", &n, &k), n)
{
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
for (int i = 0; i < n; i++)
scanf("%d", &b[i]);
solve();
}
return 0;
}