제출 #1161239

#제출 시각아이디문제언어결과실행 시간메모리
1161239marcus06Cloud Computing (CEOI18_clo)C++20
100 / 100
468 ms2956 KiB
#include <bits/stdc++.h> using namespace std; using lli = int64_t; #ifdef LOCAL #include </home/marcus06/vimcp/Library/debug.h> #else #define debug(...) #endif const lli INF = 1e18 + 7; using triplet = array <int, 3>; void solve() { int N; cin >> N; vector <triplet> computers(N); int numCores = 0; for (int i = 0; i < N; ++i) { for (int j = 0; j < 3; ++j) cin >> computers[i][j]; computers[i][2] *= -1; numCores += computers[i][0]; } sort(computers.begin(), computers.end(), [&](triplet i, triplet j) { return i[1] > j[1]; }); int M; cin >> M; vector <triplet> orders(M); for (int i = 0; i < M; ++i) { for (int j = 0; j < 3; ++j) cin >> orders[i][j]; orders[i][0] *= -1; } sort(orders.begin(), orders.end(), [&](triplet i, triplet j) { return i[1] > j[1]; }); vector <triplet> newSet; int j = 0; for (int i = 0; i < N; ++i) { while (j < M && orders[j][1] > computers[i][1]) { newSet.emplace_back(orders[j]); j++; } newSet.emplace_back(computers[i]); } while (j < M) { newSet.emplace_back(orders[j]); j++; } int newSize = N + M; vector <vector <lli>> dp(2, vector <lli> (numCores + 1, -INF)); dp[0][0] = 0; for (int i = 0; i < newSize; ++i) { int cur = i & 1; int nxt = (i + 1) & 1; //dp[cur][0] = max(dp[cur][0], (lli) 0); auto [c, f, v] = newSet[i]; for (int j = 0; j <= numCores; ++j) { dp[nxt][j] = max(dp[nxt][j], dp[cur][j]); if (0 <= j + c && j + c <= numCores) { dp[nxt][j + c] = max(dp[nxt][j + c], dp[cur][j] + v); } } } lli ans = 0; for (int i = 0; i <= numCores; ++i) { ans = max(ans, dp[newSize & 1][i]); } cout << ans << '\n'; } int main() { std::cin.tie(0)->sync_with_stdio(0); #ifdef LOCAL auto begin = std::chrono::high_resolution_clock::now(); #endif int tt = 1; while (tt--) { solve(); } #ifdef LOCAL auto end = std::chrono::high_resolution_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin); std::cerr << "Time measured: " << elapsed.count() * 1e-9 << " seconds.\n"; #endif 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...