제출 #1268380

#제출 시각아이디문제언어결과실행 시간메모리
1268380nathlol2Knapsack (NOI18_knapsack)C++20
100 / 100
54 ms3280 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int s, n;
    cin >> s >> n;
    vector<int> a, b;
    priority_queue<pair<int, int>> pq[2001];
    for(int i = 0;i<n;i++){
        int p, w, m;
        cin >> p >> w >> m;
        pq[w].push({p, m});
    }
    for(int i = 1;i<=2000;i++){
        int k = 0;
        while(!pq[i].empty()){
            auto [p, m] = pq[i].top();
            while(k <= 2000 / i && m != 0){
                a.push_back(p);
                b.push_back(i);
                --m;
                ++k;
            }
            pq[i].pop();
        }
    }
    // for(auto v : a) cerr << v << ' ';
    // cerr << '\n';
    // for(auto v : b) cerr << v << ' ';
    int sz = a.size();
    vector<int> dp(s + 1), prev(s + 1);
    for(int i = 1;i<=sz;i++){
        for(int j = 1;j<=s;j++){
            if(j >= b[i - 1]){
                dp[j] = max(prev[j], prev[j - b[i - 1]] + a[i - 1]);
            }
        }
        swap(dp, prev);
    }
    cout << prev[s] << '\n';
}
#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...