제출 #1306096

#제출 시각아이디문제언어결과실행 시간메모리
1306096turtle_keyKnapsack (NOI18_knapsack)C++20
100 / 100
40 ms2012 KiB
#include <iostream> #include <vector> #include <utility> #include <algorithm> #define ll long long using namespace std; bool cmp(pair<int,int> a, pair<int,int> b){ return a.first > b.first; } const int NMAX = 2000; int dp[NMAX + 1]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int S, N; cin >> S >> N; vector<vector<pair<int,int>>> bucket(S + 1); for (int i = 0; i < N; i++) { int V, W; long long K; cin >> V >> W >> K; int L = S / W; long long cnt = min<long long>(K, L); bucket[W].push_back({V, cnt}); } vector<pair<int,int>> items(2000); for (int w = 1; w <= S; w++) { if (bucket[w].empty()){ continue; } int L = S / w; // max usuable count auto &vec = bucket[w]; sort(vec.begin(), vec.end(), cmp); int remaining = L; for (auto [val, cnt] : vec) { if (remaining == 0){ break; } int take = min(cnt, remaining); remaining -= take; for (int t = 0; t < take; t++) { items.push_back({w, val}); } } } for (auto [w, val] : items) { for (int cap = S; cap >= w; cap--) { dp[cap] = max(dp[cap], dp[cap - w] + val); } } 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...