Submission #398992

#TimeUsernameProblemLanguageResultExecution timeMemory
398992KoDCloud Computing (CEOI18_clo)C++17
100 / 100
299 ms1984 KiB
#include <bits/stdc++.h>

using ll = long long;

template <class T>
using Vec = std::vector<T>;

constexpr ll INF = std::numeric_limits<ll>::max() / 2;

struct State {
    int c, f, v;
    bool t;
};

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int N;
    std::cin >> N;
    Vec<State> state;
    for (int i = 0; i < N; ++i) {
        int c, f, v;
        std::cin >> c >> f >> v;
        state.push_back(State{c, f, v, false});
    }
    int Q;
    std::cin >> Q;
    for (int i = 0; i < Q; ++i) {
        int c, f, v;
        std::cin >> c >> f >> v;
        state.push_back(State{c, f, v, true});
    }
    std::sort(state.begin(), state.end(), [&](const State& a, const State& b) {
        if (a.f != b.f) return a.f > b.f;
        return b.t;
    });
    Vec<ll> dp(1, 0);
    for (const auto [c, f, v, t]: state) {
        if (t) {
            for (int i = c; i < (int) dp.size(); ++i) {
                dp[i - c] = std::max(dp[i - c], dp[i] + v);
            }
        }
        else {
            const int cur = (int) dp.size();
            dp.resize(cur + c, -INF);
            for (int i = cur - 1; i >= 0; --i) {
                dp[i + c] = std::max(dp[i + c], dp[i] - v);
            }
        }
    }
    std::cout << *std::max_element(dp.begin(), dp.end()) << '\n';
    return 0;
}
#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...