Submission #1250532

#TimeUsernameProblemLanguageResultExecution timeMemory
1250532goldenbullKnapsack (NOI18_knapsack)C++17
100 / 100
56 ms34376 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
template<typename T>
using ve = vector<T>;
using ll = long long;
using pll = pair<ll, ll>;

const char el = '\n';
const int maxw = 2007;

int n, W;
map<int, ve<pll>> orz;
ll dp[maxw][maxw];

template<typename T>
void print(T a[], int n) { for (int i = 0; i < n; i++) cout << a[i] << ' '; cout << el; }

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
//    freopen("test.inp", "r", stdin);
//    freopen(".inp", "r", stdin);
//    freopen(".out", "w", stdout);

    cin >> W >> n;
    for (int i = 0; i < n; i++) {
        int w; ll v, k;
        cin >> v >> w >> k;
        if (w <= W) orz[w].pb(pll(v, k));
    }

    int at = 1;
    for (auto& i : orz) {
        int w = i.fi;
        ve<pll>& items = i.se;

        sort(all(items), greater<pll>());
//        for (auto i : items) cout << '(' << i.fi << ' ' << i.se << ')' << ' '; cout << el;

        for (int j = 0; j <= W; j++) {
            dp[at][j] = dp[at-1][j];

            int cnt = 1;
            int itm_cnt = 1;
            int itm_at = 0;
            ll acc_val = 0;
            while (w*cnt <= j && itm_at < items.size()) {
                acc_val += items[itm_at].fi;
                ll p = acc_val + dp[at-1][j - w*cnt];
                dp[at][j] = max(dp[at][j], p);

                cnt++;
                itm_cnt++;
                if (itm_cnt > items[itm_at].se) {
                    itm_at++;
                    itm_cnt = 1;
                }
            }
        }
        at++;
    }

//    for (int i = 0; i < at; i++) print(dp[i], W+1);
    cout << dp[at-1][W];

    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...