Submission #1185956

#TimeUsernameProblemLanguageResultExecution timeMemory
1185956gyg나일강 (IOI24_nile)C++20
17 / 100
2096 ms4912 KiB
#include "nile.h"
#include <bits/stdc++.h>
using namespace std;
#define sig signed 
#define int long long
#define arr array 
#define vec vector
#define pii pair<int, int>
#define fir first 
#define sec second
const int N = 1e5 + 5, INF = 1e18;

int n;
arr<pii, N> a;

arr<arr<int, 2>, N> dp;
int slv(int d) {
    for (int i = 1; i <= n; i++) {
        for (int b : {0, 1}) {
            dp[i][b] = (b == 1) ? a[i].sec : -INF;
            for (int j = 1; j <= i - 1; j++) {
                if (b == 0 && a[i].fir - a[j].fir > d) continue;
                dp[i][b] = max(dp[i][b], dp[j][!b] + a[i].sec);
            }
        }
    }

    int ans = 0;
    for (int i = 1; i <= n; i++)
        ans = max(ans, dp[i][0]);
    return ans;
}

vec<int> calculate_costs(vec<sig> _ps, vec<sig> _fl, vec<sig> _pr, vec<sig> _qr) {
    n = _ps.size();
    int sm = 0;
    for (int i = 1; i <= n; i++) {
        a[i] = {_ps[i - 1], _fl[i - 1] - _pr[i - 1]};
        sm += _fl[i - 1];
    }
    sort(a.begin() + 1, a.begin() + n + 1);

    // for (int i = 1; i <= n; i++)
    //     cout << a[i].fir << " " << a[i].sec << '\n';

    vec<int> ans;
    for (int d : _qr)
        ans.push_back(sm - slv(d));
    return ans;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...