Submission #232809

#TimeUsernameProblemLanguageResultExecution timeMemory
232809nicolaalexandraCloud Computing (CEOI18_clo)C++14
100 / 100
508 ms1408 KiB
#include <bits/stdc++.h>
#define DIM 100010
#define INF 2000000000000000000LL
using namespace std;

struct event{
    int c,f,v,tip;
};
vector <event> events;
long long dp[DIM];
int n,m,c,f,v,i,sum;

inline int cmp (event a, event b){
    if (a.f == b.f)
        return a.tip < b.tip;
    return a.f > b.f;
}
int main (){

    //ifstream cin ("date.in");
    //ofstream cout ("date.out");

    cin>>n;
    for (i=1;i<=n;i++){
        cin>>c>>f>>v;
        events.push_back({c,f,v,0});
        sum += c;
    }
    cin>>m;
    for (i=1;i<=m;i++){
        cin>>c>>f>>v;
        events.push_back({c,f,v,1});
    }

    for (i=1;i<=sum;i++)
        dp[i] = -INF;

    sort (events.begin(),events.end(),cmp);
    for (auto it : events){
        int c = it.c, cost = it.v;
        if (it.tip){ /// proiect
            for (i=c;i<=sum;i++){
                if (dp[i] != -INF)
                    dp[i-c] = max (dp[i-c], dp[i] + cost);
            }
        } else { /// calculator
            for (i=sum;i>=0;i--){
                if (dp[i] != -INF)
                    dp[i+c] = max (dp[i+c], dp[i] - cost);
            }}}

    long long sol = 0;
    for (i=0;i<=sum;i++)
        sol = max (sol,dp[i]);

    cout<<sol;

    return 0;
}
#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...