Submission #1264734

#TimeUsernameProblemLanguageResultExecution timeMemory
1264734datluong_04Cloud Computing (CEOI18_clo)C++20
100 / 100
260 ms1352 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#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 Order{
    ll cores , f , cost;
};

bool cmp(const Order &a , const Order &b){
    if(a.f == b.f) return a.cost < b.cost;
    return a.f > b.f;
}

int main(){
    FAST;
    int n;
    cin >> n;
    vector<Order> v;
    FOR(i , 0 , n - 1){
        Order a;
        cin >> a.cores >> a.f >> a.cost;
        a.cost = -a.cost;
        v.push_back(a);
    }

    int m;
    cin >> m;
    FOR(i , 0 , m - 1){
        Order a;
        cin >> a.cores >> a.f >> a.cost;
        a.cores = -a.cores;
        v.push_back(a);
    }

    sort(v.begin() , v.end() , cmp);
    vector<ll> dp((int) 1e5 + 55);
    int k = dp.size();

    FOR(i , 0 , k - 1) dp[i] = -1e18;
    dp[0] = 0;
    for(auto x : v){
        if(x.cores > 0){
            for(int i = k - 1 ; i >= 0 ; i--){
                if(i - x.cores >= 0) dp[i] = max(dp[i] , dp[i - x.cores] - abs(x.cost));
            }
        }
        else{
            FOR(i , 0 , k - 1){
                if(i + abs(x.cores) >= dp.size()) continue;
                dp[i] = max(dp[i] , dp[i + abs(x.cores)] + abs(x.cost));
            }
        }
    }
    ll ans = 0;
    FOR(i , 0 , k - 1) ans = max(ans , dp[i]);
    cout << ans;
}
#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...