This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define db double
int INF = 0x3f3f3f3f3f3f3f3f;
struct Val {
int a, b, idx;
Val(int x = 0, int y = 0, int z = 0) : a(x), b(y), idx(z) {}
};
bool comp1(const Val& a, const Val& b) {
return (make_pair(a.b, -a.a) < make_pair(b.b, -b.a));
}
bool comp2(const Val& a, const Val& b) {
return (make_pair(a.a, a.idx) < make_pair(b.a, b.idx));
}
const int MAXN = 505;
db dp[MAXN][MAXN];
int32_t main() {
int n, k;
cin >> n >> k;
vector<Val> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i].a >> v[i].b;
if (v[i].b == -1) v[i].b = INF;
v[i].idx = (i + 1);
}
sort(v.begin(), v.end(), comp1);
v.insert(v.begin(), 0);
cout << fixed << setprecision(2);
db ans = INF;
for (int p = 0; p <= k; p++) {
for (int i = 0; i <= k; i++) {
for (int j = 0; j <= k; j++) dp[i][j] = INF;
}
dp[0][0] = 0;
for (int i = 1; i <= k; i++) {
for (int j = 0; j <= i; j++) {
// case 1, we get i to be a companion
if (j > 0) {
db case1 = dp[i - 1][j - 1] + ((db)v[i].b)/((db)j);
dp[i][j] = min(dp[i][j], case1);
}
db case2 = dp[i - 1][j] + ((db)v[i].a)/((db)(p + 1));
dp[i][j] = min(dp[i][j], case2);
}
}
int need = (k - p);
for (int i = 0; i <= need; i++) {
int sumI = 0;
vector<int> rem;
for (int j = (p + i + 1); j <= n; j++) {
rem.push_back(v[j].a);
}
sort(rem.begin(), rem.end());
for (int j = 0; j < (need - i); j++) {
sumI += rem[j];
}
db sum = ((db)sumI)/((db)p+1);
db curr = (sum + dp[p + i][p]);
if (i != need) {
sum -= rem.back();
rem.pop_back();
}
if (curr < ans) {
//cout << sum << " " << i << " " << p << " " << dp[p + 1][p] << "\n";
}
ans = min(ans, curr);
}
}
cout << ans << "\n";
}
# | 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... |