01分数规划
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1005;
typedef long long ll;
int n, k;
double a[N], b[N], tmp[N];
bool cmp(double a, double b) {
return a > b;
}
int main() {
while (~scanf("%d%d", &n, &k) && n || k) {
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, r = 1e15;
for (int i = 0; i < 200; i++) {
double mid = (l + r) / 2;
for (int j = 0; j < n; j++) tmp[j] = a[j] - b[j] * mid;
sort(tmp, tmp + n, cmp);
double sum = 0;
for (int j = 0; j < n - k; j++) sum += tmp[j];
if (sum < 0) r = mid;
else l = mid;
}
printf("%lld\n", (ll)(l * 100 + 0.5));
}
return 0;
}