Submission #890513

#TimeUsernameProblemLanguageResultExecution timeMemory
890513cumanCloud Computing (CEOI18_clo)C++14
100 / 100
741 ms2140 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,l,r) for(int i = (l); i <= (r); i++) #define sqr(x) ((x) * (x)) #define len(v) (int((v).size())) #define all(v) v.begin(),v.end() using i64 = long long; #define x() real() #define y() imag() #define ckmin(a,b) a = min(a,b) #define ckmax(a,b) a = max(a,b) const int MaxN = 2000; const int MaxCores = 50 * MaxN; // (clock rate, cores added, profit added) array<int,3> Transacs[2*MaxN]; int tranCount = 0; int N, M; // dp function for reference. the answer is F(0, 0) int F(int p, int curCores) { if (p == tranCount) return 0; int res1 = curCores + Transacs[p][1] >= 0 ? F(p+1, curCores + Transacs[p][1]) + Transacs[p][2] : 0; int res2 = F(p+1, curCores); return max(res1, res2); } i64 dp[MaxCores + 1], dpprev[MaxCores + 1]; signed main() { cin >> N; for (int i = 0; i < N; i++) { int c, f, v; cin >> c >> f >> v; Transacs[tranCount++] = {f, c, -v}; } cin >> M; for (int i = 0; i < M; i++) { int c, f, v; cin >> c >> f >> v; Transacs[tranCount++] = {f, -c, v}; } sort(Transacs, Transacs + tranCount, greater<array<int,3>>()); for (int p = tranCount; p >= 0; p--) { for (int curCores = MaxCores; curCores >= 0; curCores--) { if (p == tranCount) { dp[curCores] = 0; continue; } i64 res1 = curCores + Transacs[p][1] >= 0 ? dpprev[curCores + Transacs[p][1]] + Transacs[p][2] : 0; i64 res2 = dpprev[curCores]; dp[curCores] = max(res1, res2); } swap(dp, dpprev); } cout << dpprev[0]; 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...