Submission #1270486

#TimeUsernameProblemLanguageResultExecution timeMemory
1270486osmiyumCloud Computing (CEOI18_clo)C++20
100 / 100
398 ms2196 KiB
#include <bits/stdc++.h> using namespace std; struct Item { int cores; // bilgisayar için +ci, müşteri için -Cj long long val; // bilgisayar için -vi, müşteri için +Vj long long f; // clock rate (fi veya Fj) }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<Item> all; // bilgisayarlar for (int i = 0; i < n; i++) { int c; long long f, v; cin >> c >> f >> v; all.push_back({c, -v, f}); } int m; cin >> m; // müşteriler for (int i = 0; i < m; i++) { int C; long long F, V; cin >> C >> F >> V; all.push_back({-C, V, F}); } // sıralama: büyükten küçüğe f, eşit f’de bilgisayarlar önde sort(all.begin(), all.end(), [](const Item &a, const Item &b) { if (a.f != b.f) return a.f > b.f; return a.cores > b.cores; // bilgisayar (+) öne }); // toplam core kapasitesi int MAXC = 0; for (auto &it : all) if (it.cores > 0) MAXC += it.cores; const long long NEG = -4e18; vector<long long> dp(MAXC+1, NEG); dp[0] = 0; for (auto &it : all) { vector<long long> ndp = dp; // yeni durum if (it.cores >= 0) { // bilgisayar alınıyor: core ekleniyor for (int j = 0; j <= MAXC - it.cores; j++) { if (dp[j] != NEG) { ndp[j + it.cores] = max(ndp[j + it.cores], dp[j] + it.val); } } } else { int need = -it.cores; // müşteri kabul ediliyor: core azalıyor for (int j = need; j <= MAXC; j++) { if (dp[j] != NEG) { ndp[j - need] = max(ndp[j - need], dp[j] + it.val); } } } dp.swap(ndp); } long long ans = 0; for (long long v : dp) ans = max(ans, v); cout << ans << "\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...