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