Submission #975892

#TimeUsernameProblemLanguageResultExecution timeMemory
975892vjudge1Knapsack (NOI18_knapsack)C++17
100 / 100
167 ms246608 KiB
#include <bits/stdc++.h>
using namespace std;
 
typedef unsigned long long ull;
typedef unsigned long long int ulli;
typedef long long ll;
typedef long long int lli;
typedef long double ld;
typedef string st;
#define all(x) x.begin(), x.end()
#define pb push_back
#define pf push_front
#define ppf pop_front
#define ppb pop_back
#define fastIO ios_base::sync_with_stdio(false); cin.tie(0);
#define pii pair<int, int>
#define psi pair<string, int>
#define F first
#define S second
#define p(a, b) pair<a, b>
#define vin vector<int>
#define v(a) vector<a>
#define pll p(ll, ll)
//------------------------------------------------------------------------------------------------------------------
#define trace(x) cout<<"> "<<#x<<" : "<<x<<endl
#define trace2(x,y) cout<<"> "<<#x<<" : "<<x<<" | "<<#y<<" : "<<y<<endl
#define trace3(x,y,z) cout<<"> "<<#x<<" : "<<x<<" | "<<#y<<" : "<<y<<" | "<<#z<<" : "<<z<<endl
#define trace4(w,x,y,z) cout<<"> "<<#w<<" : "<<w<<" | "<<#x<<" : "<<x<<" | "<<#y<<" : "<<y<<" | "<<#z<<" : "<<z<<endl
// CONSTANT
#define mod     1000000007 // 1e9+7
#define mods    998244353  // Prime
#define eps     0.000000001 // 1e-9
#define inf     2147483647 // INT_MAX
#define INF     9223372036854775807 // LLONG_MAX
//-------------------------------------------------------------------------------------------------------------------
template<typename T>
void print(pair<T, T> var) { // print pair
        cout << var.first << ' ' << var.second << endl;
}

template<typename T>
void print(vector<T> var) { // print vector
        for(auto i : var) {
                cout << i << ' ';
        } cout << endl;
}

template<typename T>
void print(vector<pair<T, T>> var) { //print vector pair
        for(auto &i : var) {
                cout << i.first << ' ' << i.second << endl;
        }
}
//---------------------------------------------------------------------------------------------------------------------------

int main(){
fastIO
//int t; cin >> t;
//  while(t--){

//  }
ll s, n; cin >> s >> n;
v(v(pll)) cat(2001);
for(int i = 0; i < n; i++){
    ll val, w, k; cin >> val >> w >> k;
    cat[w].pb({val, k});
}
v(ll) knap, beb;
for(int i = 1; i <= 2000; i++){
    if(cat[i].empty()) continue;
    sort(all(cat[i]));
    ll pos = s/i;
    while(pos > 0 && !cat[i].empty()){
        ll val = cat[i].back().F;
        // trace2(val,cap);
        knap.pb(val);
        beb.pb(i);
        pos--;
        cat[i].back().S--;
        if(cat[i].back().S == 0) cat[i].ppb();
    }
}

ll m = knap.size();
// print(knap);
// print(beb);
v(v(ll)) dp(m, v(ll)(s+1, 0));

for(int i = beb[0]; i <= s; i++){
    dp[0][i] = knap[0];
}

for(int i = 1; i < m; i++){
    for(int j = 0; j <= s; j++){
        dp[i][j] = dp[i-1][j];
        if(j >= beb[i]){
            dp[i][j] = max(dp[i][j], dp[i-1][j-beb[i]]+knap[i]);
        }
    }
}

ll ans = 0;
for(int i = 0; i <= s; i++) ans = max(ans, dp[m-1][i]);
cout << ans;
}
#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...