#include <bits/stdc++.h>
using namespace std;
vector < pair <int , int> > candidati[2001] , sir[2001];
int maxim[2001] , temporar[2001] , stanga[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;
sir[greutate].emplace_back(valoare , __limita);
}
for (int greutate = 1 ; greutate <= limita ; greutate++)
{
sort(sir[greutate].begin() , sir[greutate].end() , greater < pair <int , int> > ());
int suma = 0 , indice = 0;
while (indice < (int)sir[greutate].size() && suma < limita / greutate)
{ suma += sir[greutate][indice++].second; }
sir[greutate].resize(indice);
}
for (int greutate = 1 ; greutate <= limita ; greutate++) {
for (auto& termen : sir[greutate])
{
int& valoare = termen.first;
int& __limita = termen.second;
for (int indice = 0 ; indice < greutate ; indice++)
{ candidati[indice].clear(); stanga[indice] = 0; }
for (int indice = 0 , __indice = 0 ; indice <= limita ; indice++)
{
if (stanga[__indice] < (int)candidati[__indice].size() && (indice - candidati[__indice][stanga[__indice]].second) / greutate > __limita)
{ stanga[__indice]++; }
temporar[indice] = max(maxim[indice] , stanga[__indice] >= (int)candidati[__indice].size() ? -1 : candidati[__indice][stanga[__indice]].first + indice / greutate * valoare);
if (maxim[indice] != -1)
{
pair <int , int> actual = {maxim[indice] - indice / greutate * valoare , indice};
while (stanga[__indice] < (int)candidati[__indice].size() && candidati[__indice].back().first <= actual.first)
{ candidati[__indice].pop_back(); }
candidati[__indice].push_back(actual);
}
if (++__indice == greutate)
{ __indice = 0; }
}
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... |