Submission #703913

#TimeUsernameProblemLanguageResultExecution timeMemory
703913finn__Cloud Computing (CEOI18_clo)C++17
100 / 100
662 ms1996 KiB
#include <bits/stdc++.h>
using namespace std;

struct Transaction
{
    uint64_t f;
    int64_t c, v;

    bool operator<(Transaction const &t) const
    {
        if (f == t.f)
            return v < 0 && !(t.v < 0);
        return f > t.f;
    }
};

#define N 4000
#define C 51

Transaction t[N];
int64_t dp[N * C];

int main()
{
    size_t n, l = 0;
    cin >> n;

    for (size_t i = 0; i < n; i++)
    {
        cin >> t[l].c >> t[l].f >> t[l].v;
        t[l].v = -t[l].v;
        l++;
    }

    size_t m;
    cin >> m;

    for (size_t i = 0; i < m; i++)
    {
        cin >> t[l].c >> t[l].f >> t[l].v;
        t[l].c = -t[l].c;
        l++;
    }

    sort(t, t + l);
    fill(dp + 1, dp + N * C, INT64_MIN);

    for (size_t i = 0; i < l; i++)
    {
        auto const &[f, c, v] = t[i];

        if (c < 0)
        {
            for (int64_t j = -c; j < N * C; j++)
                if (dp[j] != INT64_MIN)
                    dp[j + c] = max(dp[j + c], dp[j] + v);
        }
        else
        {
            for (int64_t j = N * C - c - 1; j >= 0; j--)
                if (dp[j] != INT64_MIN)
                    dp[j + c] = max(dp[j + c], dp[j] + v);
        }
    }

    int64_t max_value = 0;
    for (size_t i = 0; i < N * C; i++)
        max_value = max(max_value, dp[i]);

    cout << max_value << '\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...