Submission #1125098

#TimeUsernameProblemLanguageResultExecution timeMemory
1125098PanndaCloud Computing (CEOI18_clo)C++20
100 / 100
1406 ms2148 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2000, M = 2000, C = 50; const long long INF = 2e18; long long dp[2][M + 1][C + 1]; void toMax(long long &x, long long y) { if (y > x) x = y; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<array<int, 3>> supplies(n); // (power, number, cost) for (int i = 0; i < n; i++) { cin >> supplies[i][1] >> supplies[i][0] >> supplies[i][2]; } int m; cin >> m; vector<array<int, 3>> orders(m); // (power, number, cost) for (int i = 0; i < m; i++) { cin >> orders[i][1] >> orders[i][0] >> orders[i][2]; } sort(supplies.begin(), supplies.end(), greater<>()); sort(orders.begin(), orders.end(), greater<>()); for (int i = 0; i < 2; i++) { for (int j = 0; j <= m; j++) { for (int c = 0; c <= C; c++) { dp[i][j][c] = -INF; } } } dp[0][0][0] = 0; for (int i = 0; i <= n; i++) { for (int j = 0; j <= m; j++) { for (int c = 0; c <= C; c++) { if (i < n) toMax(dp[1][j][c], dp[0][j][c]); if (j < m) toMax(dp[0][j + 1][c], dp[0][j][c]); if (i < n && c + supplies[i][1] <= C) toMax(dp[1][j][c + supplies[i][1]], dp[0][j][c] - supplies[i][2]); if (j < m && i > 0 && orders[j][0] <= supplies[i - 1][0] && c - orders[j][1] >= 0) toMax(dp[0][j + 1][c - orders[j][1]], dp[0][j][c] + orders[j][2]); if (i < n && j < m && orders[j][0] <= supplies[i][0] && c + supplies[i][1] - orders[j][1] >= 0 && c + supplies[i][1] - orders[j][1] <= C) toMax(dp[1][j + 1][c + supplies[i][1] - orders[j][1]], dp[0][j][c] - supplies[i][2] + orders[j][2]); } } if (i < n) for (int j = 0; j <= m; j++) { for (int c = 0; c <= C; c++) { dp[0][j][c] = dp[1][j][c]; dp[1][j][c] = -INF; } } } long long ans = 0; for (int c = 0; c <= 50; c++) { toMax(ans, dp[0][m][c]); } 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...