Submission #1362894

#TimeUsernameProblemLanguageResultExecution timeMemory
1362894ereringCatfish Farm (IOI22_fish)C++20
0 / 100
1096 ms15976 KiB
#include <bits/stdc++.h>
using namespace std;

long long max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) {
    vector<vector<pair<int,int>>> fish(N);
    vector<vector<int>> vals(N);

    for (int i = 0; i < M; ++i) {
        fish[X[i]].push_back({Y[i], W[i]});
        vals[X[i]].push_back(Y[i]);
        vals[X[i]].push_back(Y[i] + 1);
        if (X[i] > 0) vals[X[i] - 1].push_back(Y[i] + 1);
        if (X[i] + 1 < N) vals[X[i] + 1].push_back(Y[i] + 1);
    }

    for (int c = 0; c < N; ++c) {
        vals[c].push_back(0);
        vals[c].push_back(N);
        sort(vals[c].begin(), vals[c].end());
        vals[c].erase(unique(vals[c].begin(), vals[c].end()), vals[c].end());
        sort(fish[c].begin(), fish[c].end());
    }

    vector<long long> dp(vals[0].size(), 0), ndp;

    for (int c = 1; c < N; ++c) {
        int A = vals[c - 1].size();
        int B = vals[c].size();
        ndp.assign(B, LLONG_MIN / 4);

        for (int bi = 0; bi < B; ++bi) {
            int b = vals[c][bi];
            long long best = LLONG_MIN / 4;

            for (int ai = 0; ai < A; ++ai) {
                int a = vals[c - 1][ai];

                long long add = 0;
                for (auto [y, w] : fish[c - 1]) {
                    if (a <= y && b > y) add += w;
                }

                best = max(best, dp[ai] + add);
            }

            ndp[bi] = best;
        }

        dp.swap(ndp);
    }

    long long ans = 0;
    for (long long v : dp) ans = max(ans, v);
    return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...