Submission #1266638

#TimeUsernameProblemLanguageResultExecution timeMemory
1266638nguynLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
100 ms448 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define F first
#define S second
#define pb push_back
#define pii pair<int, int>

pii a[505];
int n, m;
double res = 1e9;

bool cmp(pii x, pii y) {
    if (x.F != y.F) return x.F < y.F;
    return x.S < y.S;
}

double f[505];

void cal(int k) {
    for (int i = 0; i <= n; i++) {
        f[i] = 1e9;
    }
    f[0] = 0;
    for (int i = 1; i <= n; i++) {
//        cout << a[i].F << ' ' << a[i].S << endl;
        for (int j = m - k; j >= 0; j--) {
            if (j < m - k) {
                f[j + 1] = min(f[j + 1], f[j] + (double)a[i].S / (k + 1));
            }
            int x = i - j;
            if (0 < x && x <= k) f[j] += (double)a[i].F / x;
        }
    }
//    cout << f[n][k] << endl;
//    cout << f[m - k] << endl;
    res = min(res, f[m - k]);
}

signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].S >> a[i].F;
        if (a[i].F == -1) a[i].F = 1e9;
    }
    sort(a + 1, a + 1 + n, cmp);
    for (int i = 0; i < m; i++) {
        cal(i);
    }
    cout << fixed << setprecision(20) << res;
}
#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...