#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 200005
#define FOR(i , a , b) for(int i = a ; i <= b; i++)
#define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
struct Transaction{
int cores;
ll f , cost;
};
bool cmp(const Transaction &a , const Transaction &b){
if(a.f == b.f) return a.cost < b.cost;
return a.f > b.f;
}
int main(){
FAST;
int n , m;
cin >> n;
vector<Transaction> a;
// buy a computer
int max_cores = 0;
FOR(i , 0 , n - 1){
Transaction t;
cin >> t.cores >> t.f >> t.cost;
max_cores += t.cores;
t.cost = -t.cost;
a.push_back(t);
}
cin >> m;
FOR(i , 0 , m - 1){
Transaction t;
cin >> t.cores >> t.f >> t.cost;
max_cores += t.cores;
t.cores = -t.cores;
a.push_back(t);
}
sort(a.begin() , a.end() , cmp);
vector<ll> dp(max_cores + 1);
FOR(i , 0 , max_cores) dp[i] = -1e18;
dp[0] = 0;
for(const Transaction &x : a){
// buy a computer
if(x.cores > 0){
for(int j = max_cores ; j >= 0 ; j--){
if(j - x.cores >= 0 && dp[j - x.cores] != -1e18) dp[j] = max(dp[j] , dp[j - x.cores] - abs(x.cost));
}
}
else{
FOR(j , 0 , max_cores){
if(j + abs(x.cores) < max_cores && dp[j + abs(x.cores)] != -1e18) dp[j] = max(dp[j] , dp[j + abs(x.cores)] + abs(x.cost));
}
}
}
ll ans = 0;
FOR(i , 0 , max_cores) ans = max(ans , dp[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... |