#include<bits/stdc++.h>
#define int long long
using namespace std;
int dp[2][100005];
struct Thing
{
int c, f, v;
int type;
Thing(int c, int f, int v, int type): c(c), f(f), v(v), type(type){}
};
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
vector<Thing> st;
int n; cin>>n;
for(int i = 1; i <= n; i++){
int c, f, v; cin>>c>>f>>v;
st.emplace_back(c, f, v, 0);
}
int m; cin>>m;
for(int i = 1; i <= m; i++){
int c, f, v; cin>>c>>f>>v;
st.emplace_back(c, f, v, 1);
}
sort(st.begin(), st.end(), [&](Thing &x, Thing &y){return x.f > y.f || (x.f == y.f && x.type < y.type);});
int sum = n*50;
for(int i = 1; i <= sum; i++) dp[0][i] = -1e18;
for(int i = 0; i < st.size(); i++){
int u = i%2, v = (u^1);
for(int j = 0; j <= sum; j++){
dp[v][j] = dp[u][j];
if(st[i].type == 0){
if(j >= st[i].c) dp[v][j] = max(dp[v][j], dp[u][j-st[i].c] - st[i].v);
}
else{
if(j+st[i].c <= sum) dp[v][j] = max(dp[v][j], dp[u][j+st[i].c] + st[i].v);
}
}
}
int ans = 0;
for(int i = 0; i <= sum; i++) ans = max(ans, dp[st.size()%2][i]);
cout<<ans;
}
| # | 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... |