Submission #633553

#TimeUsernameProblemLanguageResultExecution timeMemory
633553ojoConmigoKnapsack (NOI18_knapsack)C++17
49 / 100
113 ms262144 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

struct Item{
    ll v,w,k;

    bool operator<(const Item &rhs){
        return ((ld)((ld)v/(ld)w) < (ld)((ld)rhs.v/(ld)rhs.w));
    }
};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);

    int s,n;
    cin >> s >> n;
    vector<Item> v;
    Item a;
    a.v = a.k = a.w = 0;
    v.push_back(a);
    int cont = 0;
    for(int i=1; i<=n; i++){
        Item h;
        cin >> h.v >> h.w >> h.k;
        int ind = 0;
        while(h.k-- && ind < 2000){
            cont++; ind++;
            v.push_back(h);
        }
    }
    //sort(begin(v),end(v));
    //reverse(begin(v),end(v));
    vector<vector<ll>> dp(cont+1,vector<ll> (s+1,0));
    for(int i=1; i<=cont; i++){
        for(int j=1; j<=s; j++){
            dp[i][j] = dp[i-1][j];
            if(j-v[i].w >= 0){
                dp[i][j] = max(dp[i][j],dp[i-1][j-v[i].w] + v[i].v);
            }
        }
    }
    cout << dp[cont][s] << endl;
}
#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...