제출 #1161604

#제출 시각아이디문제언어결과실행 시간메모리
1161604fryingducLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
81 ms328 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...