#include "bits/stdc++.h"
using namespace std;
#define int long long
#define double long double
#define ln '\n'
#ifdef LOCAL
#define gg(...) logger(#__VA_ARGS__, __VA_ARGS__)
template<typename ...Args>
void logger(string vars, Args&&... values) {
cout << vars << " = ";
string delim = "";
(..., (cout << delim << values, delim = ", "));
cout << '\n';
}
#else
#define gg(...)
#endif
array<int, 2> a[505];
double dp[505][505];
void solve(){
int n, k; cin >> n >> k;
for (int i = 1; i <= n; i++){
cin >> a[i][1] >> a[i][0];
if (a[i][0] == -1) a[i][0] = 2e9;
}
memset(dp, 0x4f, sizeof(dp));
double ans = 5e18;
for (int worker = 1; worker <= k; worker++){
sort(a+1, a+n+1);
dp[0][1] = 0;
for (int i = 1; i <= n; i++){
auto [getWorker, getVote] = a[i];
for (int j = 1; j <= worker; j++){
dp[i][j] = min(
(j-1 == 0? 1e18: (double)getWorker / (double)(j-1)) + dp[i-1][j-1],
(double)getVote / (double)worker + dp[i-1][j]
);
}
}
for (int i = k; i <= n; i++) ans = min(ans, dp[i][k]);
for (int i = k; i >= worker-1; i--){
sort(a+i+1, a+n+1, [&](const array<int,2>& x, const array<int,2>& y){
return x[1] < y[1] || (x[1] == y[1] && x[0] < y[0]);
});
double cur = 0.0;
for (int j = i+1; j <= k; j++){
cur += a[j][1];
}
ans = min(ans, cur / (double)(worker) + dp[i][worker]);
}
}
cout << fixed << setprecision(16) << ans << ln;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
solve();
// int TT; cin >> TT;
// while (TT--) 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... |