#include <bits/stdc++.h>
using namespace std;
vector <int> sir[2001];
int maxim[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;
while (__limita && greutate <= limita)
{
int ramas = 1 + (__limita - 1) % 2;
__limita -= ramas;
while (ramas--)
{ sir[greutate].push_back(valoare); }
__limita >>= 1;
greutate <<= 1;
valoare <<= 1;
}
}
for (int greutate = 1 ; greutate <= limita ; greutate++) {
if ((int)sir[greutate].size() > limita / greutate)
{
sort(sir[greutate].begin() , sir[greutate].end() , greater <int> ());
sir[greutate].resize(limita / greutate);
}
}
for (int greutate = 1 ; greutate <= limita ; greutate++) {
for (auto& valoare : sir[greutate]) {
for (int indice = limita ; indice >= greutate ; indice--) {
if (maxim[indice - greutate] != -1)
{ maxim[indice] = max(maxim[indice] , maxim[indice - greutate] + valoare); }
}
}
}
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... |