제출 #1290022

#제출 시각아이디문제언어결과실행 시간메모리
1290022m_a_dKnapsack (NOI18_knapsack)C++20
100 / 100
98 ms5444 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int32_t main() { int s, n; cin >> s >> n; int items[n][3]; for(int i=0; i<n; ++i) cin >> items[i][0] >> items[i][1] >> items[i][2], items[i][2]=min(items[i][2], s/items[i][1]); priority_queue<pair<int, int>> pque[s+1]; for(int i=0; i<n; ++i) pque[items[i][1]].push({items[i][0], items[i][2]}); vector<pair<int, int>> final_items; for(int i=1; i<=s; ++i) { int amount=0; while(!pque[i].empty() && amount+1<=s/i) { final_items.push_back({i, pque[i].top().first}); auto top=pque[i].top(); pque[i].pop(); if(top.second>1) pque[i].push({top.first, top.second-1}); amount++; } } int knapsack[s+1]={}; int sizes=final_items.size(); for(int i=0; i<sizes; ++i) { //cout << final_items[i].first << " " << final_items[i].second; for(int j=s; j>=0; --j) { if(final_items[i].first+j<=s) { knapsack[final_items[i].first+j]=max(knapsack[final_items[i].first+j], knapsack[j]+final_items[i].second); } } } int ans=0; for(auto &elem:knapsack) { //cout << elem << " "; ans=max(ans, elem); } cout << ans; 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...