#include <bits/stdc++.h>
#define int long long
using namespace std;
vector<tuple<int, int, int>> t;
int dp[2][100010];
signed main() {
cin.tie(0)->sync_with_stdio(0);
int n, m;
cin >> n;
for(int i=1; i<=n; i++) {
int c, f, v;
cin >> c >> f >> v;
t.push_back({f, c, -v});
}
cin >> m;
for(int i=1; i<=m; i++) {
int c, f, v;
cin >> c >> f >> v;
t.push_back({f, -c, v});
}
sort(t.begin(), t.end(), greater<tuple<int, int, int>>());
for(int i=0; i<100010; i++) {
dp[0][i] = -1e18;
dp[1][i] = -1e18;
}
dp[0][0] = 0;
int prev=0, cur=1;
for(auto i: t) {
int c = get<1>(i), v = get<2>(i);
for(int j=0; j<100010; j++) {
dp[cur][j] = max(dp[cur][j], dp[prev][j]);
if(j+c >= 100001 || j+c < 0) continue;
dp[cur][j+c] = max({dp[cur][j+c], dp[prev][j]+v, dp[prev][j+c]});
}
swap(prev, cur);
for(int j=0; j<100010; j++) {
dp[cur][j] = -1e18;
}
}
int ans = 0;
swap(prev, cur);
for(int i=0; i<100010; i++) {
ans = max(ans, dp[cur][i]);
}
cout << ans;
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... |