Submission #1344063

#TimeUsernameProblemLanguageResultExecution timeMemory
1344063orucKnapsack (NOI18_knapsack)C++20
100 / 100
40 ms5296 KiB
#pragma GCC optimize("O3")
//#pragma GCC target("avx2")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
 
using namespace std;
using namespace __gnu_pbds;

#define int long long
// #define endl '\n'

mt19937 rng(chrono::steady_clock().now().time_since_epoch().count());

template<class T> using is = tree<T, null_type, less<T>,rb_tree_tag, tree_order_statistics_node_update>;

template<typename T>void show(vector<T> &v){
    for(auto &i: v){
        cout << i << ' ';
    }
    cout << endl;
}

const int N = 2e5+5, INF = 1e18, LOG = 20, MOD = 998244353;


void solve(){
    int s,n;
    cin >> s >> n;
    vector<array<int,3>> v(n+1);
    vector<int> dp(s+1);
    vector<vector<pair<int,int>>> a(s+1);
    for(int i = 1; i <= n; i++){
        cin >> v[i][0] >> v[i][1] >> v[i][2];
        a[v[i][1]].push_back({v[i][0], v[i][2]});
    }
    dp[0] = 0;
    for(int i = 1; i <= s; i++){
        sort(a[i].rbegin(), a[i].rend());
        dp[i] = -INF;
    }

    for(int i = 1; i <= s; i++){
        int cnt = s/i;
        for(auto x : a[i]){
            while(cnt && x.second--){
                for(int j = s; j >= i; j--){
                    if(dp[j-i] == -INF) continue;
                    dp[j] = max(dp[j], dp[j-i] + x.first);
                }
                cnt--;
            }
            if(cnt == 0) break;
        }
    }
    int mx = 0;
    for(int i = 0; i <= s; i++){
        mx = max(mx, dp[i]);
    }
    cout << mx << endl;
}


signed main(){  
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int t = 1;
    
    // cin >> t;
    for(int i = 1; i <= t; i++){
        //cout << "Scenario #" << i << ": " << endl;
        solve();
    }
}
#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...