Submission #1312675

#TimeUsernameProblemLanguageResultExecution timeMemory
1312675melissakKnapsack (NOI18_knapsack)C++20
100 / 100
38 ms2416 KiB
#include <iostream> #include <string> #include <vector> #include <cmath> #include <unordered_set> #include <unordered_map> #include <set> #include <algorithm> #include <cctype> #include <limits> #include <iomanip> #include <stack> #include <numeric> #include <map> #include <queue> #include <cfloat> #include <climits> using namespace std; using ll = long long; const ll MOD = 1e9 + 7; const ll MAX_SAFE_LL = 1e18; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int s, n; cin >> s >> n; vector<ll> dp(s + 1); vector<vector<pair<int, int>>> items(s + 1); vector<vector<int>> nItems; for(int i = 0; i < n; ++i) { int v, w, c; cin >> v >> w >> c; items[w].push_back(make_pair(v, c)); } for(int i = 0; i <= s; ++i) { if(!items[i].empty()) { sort(items[i].begin(), items[i].end(), greater<pair<int, int>>()); int mw = s; for(auto& item : items[i]) { while(mw >= i && item.second) { nItems.push_back({i, item.first}); item.second--; mw -= i; } if(mw < i) break; } } } for(auto& ni : nItems) { for(int i = s; i >= ni[0]; --i) { dp[i] = max(dp[i], dp[i - ni[0]] + ni[1]); } } cout << dp[s] << '\n'; 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...