제출 #616838

#제출 시각아이디문제언어결과실행 시간메모리
616838AKaan37Cloud Computing (CEOI18_clo)C++17
100 / 100
380 ms1236 KiB
// author: erray #include <bits/stdc++.h> using namespace std; template<typename A, typename B> string to_string(pair<A, B> p); template<typename A, typename B, typename C> string to_string(tuple<A, B, C> t); template<typename A, typename B, typename C, typename D> string to_string(tuple<A, B, C, D> t); string to_string(string s) { return '"' + s + '"'; } string to_string(char c) { return string("'") + c + "'"; } string to_string(const char* c) { return to_string(string(c)); } string to_string(bool b) { return (b ? "true" : "false"); } template<size_t T> string to_string(bitset<T> bs) { return bs.to_string(); } string to_string(vector<bool> v) { string res = "{"; for (int i = 0; i < int(v.size()); ++i) { if (i > 0) { res += ", "; } res += to_string(v[i]); } res += "}"; return res; } template<typename T> string to_string(T v) { string res = "{"; for (auto& e : v) { if (int(res.size()) > 1) { res += ", "; } res += to_string(e); } res += "}"; return res; } template<typename A, typename B> string to_string(pair<A, B> p) { return '(' + to_string(p.first) + ", " + to_string(p.second) + ')'; } template<typename A, typename B, typename C> string to_string(tuple<A, B, C> t) { return '(' + to_string(get<0>(t)) + ", " + to_string(get<1>(t)) + ", " + to_string(get<2>(t)) + '}'; } template<typename A, typename B, typename C, typename D> string to_string(tuple<A, B, C, D> t) { return '(' + to_string(get<0>(t)) + ", " + to_string(get<1>(t)) + ", " + to_string(get<2>(t)) + ", " + to_string(get<3>(t)) + '}'; } void debug_out() { cerr << endl; } template<typename Head, typename... Tail> void debug_out(Head H, Tail... T) { cerr << " " << to_string(H); debug_out(T...); } #ifdef DEBUG #define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__) #else #define debug(...) void(37) #endif int main() { ios_base::sync_with_stdio(false); cin.tie(0); int N; cin >> N; vector<array<int, 3>> C(N); for (int i = 0; i < N; ++i) { cin >> C[i][1] >> C[i][0] >> C[i][2]; C[i][2] *= -1; } int M; cin >> M; C.resize(N + M); for (int i = 0; i < M; ++i) { cin >> C[i + N][1] >> C[i + N][0] >> C[i + N][2]; C[i + N][1] *= -1; } sort(C.begin(), C.end(), [&](array<int, 3> x, array<int, 3> y) { if (x[0] == y[0]) { return x[1] > y[1]; } else { return x[0] > y[0]; } }); const int S = 50 * N + 1; const long long inf = (long long) 1e18; vector<long long> dp(S + 1, -inf); dp[0] = 0; for (auto[foo, cap, cost] : C) { if (cap > 0) { for (int i = S - cap; i >= 0; --i) { dp[i + cap] = max(dp[i + cap], dp[i] + cost); } } else { for (int i = -cap; i <= S; ++i) { dp[i + cap] = max(dp[i + cap], dp[i] + cost); } } } cout << *max_element(dp.begin(), dp.end()) << '\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...