Submission #1291739

#TimeUsernameProblemLanguageResultExecution timeMemory
1291739SSKMFCloud Computing (CEOI18_clo)C++20
54 / 100
25 ms588 KiB
#include <bits/stdc++.h>
using namespace std;

struct Optiune { int termen , factor , cost; } sir[2][2001];
int64_t maxim[10001];

inline void Solve ()
{
    int cantitate_1;
    cin >> cantitate_1;
    
    for (int indice = 1 ; indice <= cantitate_1 ; indice++)
        { cin >> sir[0][indice].termen >> sir[0][indice].factor >> sir[0][indice].cost; }
        
    int cantitate_2;
    cin >> cantitate_2;
    
    for (int indice = 1 ; indice <= cantitate_2 ; indice++)
        { cin >> sir[1][indice].termen >> sir[1][indice].factor >> sir[1][indice].cost; }

    sort(sir[0] + 1 , sir[0] + cantitate_1 + 1 , [] (Optiune& optiune_1 , Optiune& optiune_2) -> bool {
        return optiune_1.factor > optiune_2.factor;
    });
    sort(sir[1] + 1 , sir[1] + cantitate_2 + 1 , [] (Optiune& optiune_1 , Optiune& optiune_2) -> bool {
        return optiune_1.factor > optiune_2.factor;
    });

    for (int ramas = 1 ; ramas <= 10000 ; ramas++)
        { maxim[ramas] = INT64_MIN; }

    for (int indice_1 = 1 , indice_2 = 1 ; indice_2 <= cantitate_2 ; ) {
        if (sir[0][indice_1].factor >= sir[1][indice_2].factor) {
            for (int ramas = 10000 ; ramas >= sir[0][indice_1].termen ; ramas--) {
                if (maxim[ramas - sir[0][indice_1].termen] != INT64_MIN)
                    { maxim[ramas] = max(maxim[ramas] , maxim[ramas - sir[0][indice_1].termen] - sir[0][indice_1].cost); }
            }
            indice_1++;
        } else {
            for (int ramas = 0 ; ramas <= 10000 - sir[1][indice_2].termen ; ramas++) {
                if (maxim[ramas + sir[1][indice_2].termen] != INT64_MIN)
                    { maxim[ramas] = max(maxim[ramas] , maxim[ramas + sir[1][indice_2].termen] + sir[1][indice_2].cost); }
            }
            indice_2++;
        }
    }

    int64_t rezultat = 0;
    for (auto& candidat : maxim)
        { rezultat = max(rezultat , candidat); }

    cout << rezultat;
}

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int numar_teste = 1;
    // cin >> numar_teste;
    while (numar_teste--)
        { Solve(); }

    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...