제출 #1201887

#제출 시각아이디문제언어결과실행 시간메모리
1201887vincentbucourt1Let's Win the Election (JOI22_ho_t3)C++20
11 / 100
2594 ms5108 KiB
#include <bits/stdc++.h>
using namespace std;
void fastIO(){ios_base::sync_with_stdio(false),cin.tie(0);}
#define int long long
#define ld long double
#define f first
#define s second

int N, K;
vector<pair<ld,ld>> vals;
bool cmpVals (const pair<ld,ld>& a, const pair<ld,ld>& b) {
    if (a.s == -1) return false;
    else if (b.s == -1) return false;
    else return tie(a.s, a.f) < tie(b.s, b.f);
}
ld dp[2][509][509];
ld ans = (ld)1e18;

ld test (int totalColab) {
    for (int idx = 0; idx <= 1; idx++) {
        for (int numVote = 0; numVote <= K; numVote++) {
            for (int numColab = 0; numColab <= totalColab; numColab++) {
                dp[idx][numVote][numColab] = (ld)1e18;
            }
        }
    }
    dp[0][0][0] = 0;
    for (int idx = 0; idx < N; idx++) {
        for (int numVote = 0; numVote <= K; numVote++) {
            for (int numColab = 0; numColab <= totalColab; numColab++) {
                ld situOn = dp[idx%2][numVote][numColab];
                dp[(idx+1)%2][numVote][numColab] = min(dp[(idx+1)%2][numVote][numColab], situOn);
                if (numVote+1 <= K) {
                    dp[(idx+1)%2][numVote+1][numColab] = min(dp[(idx+1)%2][numVote+1][numColab], situOn + vals[idx].f/(totalColab+1));
                }
                if (numVote+1 <= K && numColab+1 <= totalColab && vals[idx].s != -1) {
                    dp[(idx+1)%2][numVote+1][numColab+1] = min(dp[(idx+1)%2][numVote+1][numColab+1], situOn + vals[idx].s/(numColab+1));
                }
            }
        }
    }
    return dp[N%2][K][totalColab];
}

signed main() {
    fastIO();
    cin >> N >> K;
    vals.resize(N);
    for (int i = 0; i < N; i++) {
        cin >> vals[i].f >> vals[i].s;
    }
    sort(vals.begin(), vals.end(), cmpVals);
    for (int numColab = 0; numColab <= K; numColab++) {
        ans = min(ans, test(numColab));
    }
    cout << fixed << setprecision(12) << ans << "\n";
}
#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...