Submission #1298269

#TimeUsernameProblemLanguageResultExecution timeMemory
1298269uchihahahaheKnapsack (NOI18_knapsack)C++17
100 / 100
44 ms3048 KiB
#include <bits/stdc++.h>
#define ll long long
#define db long double
#define pll pair<ll,ll>
#define foru(i,a,b) for(int i=(a);i<=(b);i++)
#define ford(i,a,b) for(int i=(a);i>=(b);i--)
#define ALL(a) (a).begin(),(a).end()
#define ROUND(i) fixed<<setprecision(i)
#define fi first
#define se second
using namespace std;
ll n,S;
vector<pll>a[2003];
vector<ll>f[2003];
ll dp[2003];
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  
    cin>>S>>n;
    foru(i,1,n){
        ll w,v,k;cin>>v>>w>>k;
        a[w].push_back({v,k});
    }
    foru(w,1,S){
        sort(ALL(a[w]),greater<pll>());
        ll dem=(S/w);
        f[w].assign(dem+2,0);
        ll i=0;
        for(auto [v,k]:a[w]){
            while(dem>0&&k>0){
                k--;dem--;
                f[w][++i]=v;
            }
        }
    }
    ll res=0;
    foru(i,1,S){
        foru(t,1,f[i].size()-1){
            if(f[i][t]>0){
                ford(j,S,i){
                    dp[j]=max(dp[j],dp[j-i]+f[i][t]);
                    res=max(res,dp[j]);
                }
            }
        }
    }
    cout<<res;
    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...