Submission #1194173

#TimeUsernameProblemLanguageResultExecution timeMemory
1194173zyntherixKnapsack (NOI18_knapsack)C++20
100 / 100
50 ms3144 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pi pair<int, int>
#define vi vector<int>
#define vs vector<string>
#define vb vector<bool>
#define vpi vector<pi>
#define pb push_back
#define all(a) (a).begin(), (a).end()
const int mod = 1e9 + 7;
int s, n;
int MAXS = 2002;

void solve()
{
    int v, w, k;
    cin >> v >> w >> k;
    int b = min(s / w, k);
    cout << b * v << '\n';
}

bool cmp(pi a, pi b)
{
    return a.first > b.first;
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> s >> n;
    if (n == 1)
    {
        solve();
        return 0;
    }
    vi val;
    vi wts;
    vector<vpi> wg(MAXS);
    for (int i = 0; i < n; i++)
    {
        int v, w, k;
        cin >> v >> w >> k;
        wg[w].pb({v, k});
    }
    for (int i = 1; i < MAXS; i++)
    {
        sort(all(wg[i]), cmp);
        int j = s / i;
        int x = 0;
        while (x < wg[i].size() && max(j, wg[i][x].second) > 0)
        {
            if (j == 0)
                break;
            if (wg[i][x].second == 0)
            {
                x++;
                continue;
            }
            j--;
            wg[i][x].second--;
            val.pb(wg[i][x].first);
            wts.pb(i);
        }
    }
    vector<vi> dp(2, vi(s + 1, 0));
    for (int i = 1; i <= val.size(); i++)
    {
        for (int j = 0; j <= s; j++)
        {
            dp[1][j] = dp[0][j];
            if (j >= wts[i - 1])
            {
                dp[1][j] = max(dp[1][j], dp[0][j - wts[i - 1]] + val[i - 1]);
            }
        }
        dp[0] = dp[1];
    }
    cout << dp[1][s] << '\n';
}
#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...