Submission #965162

#TimeUsernameProblemLanguageResultExecution timeMemory
965162Elliot_7002Knapsack (NOI18_knapsack)C++14
73 / 100
1041 ms1332 KiB
#include <iostream>
#include <bits/stdc++.h> 
using namespace std;
typedef tuple<int,int,int> triad;
#define int long long
#define INF 1e9
int s,n,val,weight,occ,ans;
vector<int> dp;
vector<int> filled;
bool update(int value, int w,int att){
    if(w > s){
      return false;
    }
    if(att*w > s){
      filled[w] = value;
      return false;
    }
    if(filled[w] > value){
      return false;
    }
    for(int i = dp.size()-w-1; i >= 0; i--){
        dp[i + w] = max(dp[i+w], dp[i] + value);
    }
    return true;
}
int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> s >> n;
    dp.resize(s+1);
    filled.resize(s+1);
    //int mod = 1e9+7;
    dp[0] = 0;
    for(int i = 0; i < n; i++){
        cin >> val >> weight >> occ;
        bool help = true;
        int att = 1;
        while(occ-- && help){
            help = update(val,weight,att);
            att++;
        }
    }
    ans = dp[s];
    cout << ans;
    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...