Submission #1278934

#TimeUsernameProblemLanguageResultExecution timeMemory
1278934SSKMFKnapsack (NOI18_knapsack)C++20
73 / 100
1094 ms584 KiB
#include <bits/stdc++.h>
using namespace std;

int maxim[2001] , temporar[2001];

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

    int limita , optiuni;
    cin >> limita >> optiuni;

    for (int indice = 1 ; indice <= limita ; indice++)
        { maxim[indice] = -1; }

    while (optiuni--)
    {
        int valoare , greutate , __limita;
        cin >> valoare >> greutate >> __limita;

        for (int inceput = limita ; inceput > limita - greutate ; inceput--)
        {
            deque < pair <int , int> > candidati;
            for (int indice = inceput % greutate ; indice <= limita ; indice += greutate)
            {
                if (!candidati.empty() && (indice - candidati.front().second) / greutate > __limita)
                    { candidati.pop_front(); }

                temporar[indice] = max(maxim[indice] , candidati.empty() ? -1 : candidati.front().first + indice / greutate * valoare);

                if (maxim[indice] != -1)
                {
                    pair <int , int> actual = {maxim[indice] - indice / greutate * valoare , indice};
                    while (!candidati.empty() && candidati.back().first <= actual.first)
                        { candidati.pop_back(); }

                    candidati.push_back(actual);
                }
            }
        }
        
        for (int indice = 0 ; indice <= limita ; indice++)
            { maxim[indice] = temporar[indice]; }
    }

    int rezultat = 0;
    for (int indice = 1 ; indice <= limita ; indice++)
        { rezultat = max(rezultat , maxim[indice]); }
    
    cout << rezultat;
    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...