#include "bits/stdc++.h"
using namespace std;
#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif
const int maxn = 505;
int n, k;
int a[maxn], b[maxn];
double f[2][maxn];
int ord[maxn];
void solve() {
cin >> n >> k;
for (int i = 1; i <= n; ++i) {
cin >> a[i] >> b[i];
if (b[i] == -1) {
b[i] = 1e9;
}
}
iota(ord + 1, ord + n + 1, 1);
sort(ord + 1, ord + n + 1, [](const int &x, const int &y) -> bool {
return b[x] < b[y];
});
double res = 1e18;
for (int x = 0; x <= k; ++x) {
memset(f, 0x3f, sizeof(f));
f[0][0] = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 0; j <= min(i, k - x); ++j) {
f[i & 1][j] = f[(i - 1) & 1][j];
if (i - j <= x) {
f[i & 1][j] += 1.0 * b[ord[i]] / (i - j);
}
if (j > 0) {
f[i & 1][j] = min(f[i & 1][j], f[(i - 1) & 1][j - 1] + 1.0 * a[ord[i]] / (x + 1));
}
}
}
res = min(res, f[n & 1][k - x]);
}
cout << fixed << setprecision(9) << res;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |