This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll LINF = (ll) 1e18;
const int maxc = 10003;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n; cin >> n;
vector< tuple<int, int, int> > a;
int sum_c = 0;
for (int i = 0; i < n; i++) {
int c, f, v;
cin >> c >> f >> v;
sum_c += c;
a.emplace_back(f, v, c);
}
int m; cin >> m;
for (int i = 0; i < m; i++) {
int c, f, v;
cin >> c >> f >> v;
a.emplace_back(f, -v, c);
}
sort(a.rbegin(), a.rend());
vector< vector<ll> > dp(2, vector<ll>(sum_c + 1, -LINF));
dp[0][0] = 0;
for (int i = 0; i < n + m; i++) {
int cur = i % 2;
int f, v, c;
tie(f, v, c) = a[i];
for (int j = 0; j <= sum_c; j++) dp[!cur][j] = dp[cur][j];
if (v > 0) for (int j = 0; j + c <= sum_c; j++) dp[!cur][j + c] = max(dp[!cur][j + c], dp[cur][j] - v);
else for (int j = c; j <= sum_c; j++) dp[!cur][j - c] = max(dp[!cur][j - c], dp[cur][j] - v);
}
cout << *max_element(dp[(n + m) % 2].begin(), dp[(n + m) % 2].end()) << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |