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