Submission #499375

#TimeUsernameProblemLanguageResultExecution timeMemory
499375MohammadAghilKnapsack (NOI18_knapsack)C++17
100 / 100
90 ms33236 KiB
#include <bits/stdc++.h>
using  namespace std;
typedef  long long ll;
typedef  long double ld;
typedef  pair<int, int> pp;
#define  rep(i,l,r) for(int i = (l); i < r; i++)
#define  per(i,r,l) for(int i = (r); i >= l; i--)
#define  all(x) x.begin(), x.end()
#define  sz(x) (int)(x).size()
#define  pb push_back
#define  ff first
#define  ss second 
 
const ll mod = 1e9 + 7, maxn = 2e2 + 5, inf = ll(1e18) + 5;

int main(){
    cin.tie(0) -> sync_with_stdio(0);
    int s, n; cin >> s >> n;
    vector<vector<pp>> a(s + 1);
    rep(i,0,n){
        int w, v, k; cin >> v >> w >> k;
        k = min(k, s); 
        a[w].pb({v, k});
    }
    vector<vector<ll>> dp(s + 1, vector<ll>(s + 1));
    rep(i,1,s + 1){
        sort(all(a[i])); reverse(all(a[i]));
        vector<ll> prf(s/i + 1);
        int pt = 1;
        for(auto [v, k]: a[i]){
            while(k-- && pt != sz(prf)) prf[pt] = prf[pt-1] + v, pt++;
        }
        rep(j,1,s + 1){
            rep(k,0,sz(prf)){
                if(j < k*i) break;
                dp[i][j] = max(dp[i][j], dp[i-1][j-k*i] + prf[k]);
            }
        }
    }   
    cout << dp[s][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...