제출 #1332334

#제출 시각아이디문제언어결과실행 시간메모리
1332334piolkKnapsack (NOI18_knapsack)C++20
100 / 100
47 ms1776 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int s,n;
    cin>>s>>n;

    map<int,vector<pair<int,int>>> mp;

    for (int i=0;i<n;i++){
        int v,w,k;
        cin>>v>>w>>k;
        mp[w].push_back({v,k});
    }

    vector<long long> dp(s+1,-1);
    dp[0]=0;

    for (auto &[w,vec]:mp){
        sort(vec.rbegin(),vec.rend());
        long long sum=0;
        for (auto [v,k]:vec){
            for (int i=0;i<k;i++){
                for (int j=s;j>=w;j--){
                    if (dp[j-w]==-1) continue;
                    dp[j]=max(dp[j],dp[j-w]+v);
                }
                sum+=w;
                if (sum>s) break;
            }
            if (sum>s) break;
        }
    }

    long long ans=0;
    for (int i=0;i<=s;i++) ans=max(ans,dp[i]);

    cout<<ans<<"\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...