제출 #1350219

#제출 시각아이디문제언어결과실행 시간메모리
1350219guardianecLet's Win the Election (JOI22_ho_t3)C++20
100 / 100
228 ms4756 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    ll n,k;
    cin >> n >> k;
    vector<pair<ll,ll>> ab(n);
    vector<pair<ll,ll>> a,b;
    for (int i=0; i<n; i++) {
        cin >> ab[i].second >> ab[i].first;
        if (ab[i].first==-1) b.push_back(ab[i]);
        else a.push_back(ab[i]);
    }

    sort(a.begin(), a.end());
    sort(b.begin(), b.end());
    for (auto i : b) {
        a.push_back(i);
    }

    vector<vector<double>> s(n+1, vector<double>(n+1));
    for (int i=0; i<=n; i++) {
        vector<ll> v;
        for (int j=i; j<n; j++) {
            v.push_back(a[j].second);
        }
        sort(v.begin(), v.end());
        double s1 = 0;
        s[i][0] = 0;
        for (int j=1; j<=v.size(); j++) {
            s1+=v[j-1];
            s[i][j] = s1;
        }
    }

    double res = 1e18;

    for (int c=0; c<=k; c++) {
        vector<vector<double>> dp(n+1, vector<double>(c+1, 1e18));
        dp[0][0] = 0;
        for (int i=1; i<=k; i++) {
            for (int j=0; j<=c; j++) {
                if (dp[i-1][j]!=1e18) dp[i][j] = min(dp[i][j], dp[i-1][j]+(double)a[i-1].second/(c+1));
                if (j>0 && dp[i-1][j-1]!=1e18 && a[i-1].first!=-1) dp[i][j] = min(dp[i][j], dp[i-1][j-1]+(double)a[i-1].first/j);
            }
            if (dp[i][c]!=1e18) {
                res = min(res, dp[i][c]+s[i][k-i]/(c+1));
            }
        }

        if (c==0) res = min(res, s[0][k]);
    }

    cout << fixed << setprecision(15) << 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...