Submission #1299545

#TimeUsernameProblemLanguageResultExecution timeMemory
1299545msunKnapsack (NOI18_knapsack)C++17
0 / 100
2 ms444 KiB
#include <algorithm>
#include <cstdio>
#include <functional>
#include <utility>
#include <vector>

#define int long long

#define MAXN 100001

using namespace std;

int                     V[MAXN], W[MAXN], K[MAXN];
vector<pair<int, int> > vals[2001]; // {value, cnt}
int                     dp[2001][2001];

signed
main ()
{
    freopen ("test.in", "r", stdin);

    int S, N;
    scanf ("%lld%lld", &S, &N);

    for (int i = 1; i <= N; ++i) {
        scanf ("%lld%lld%lld", &V[i], &W[i], &K[i]);
        vals[W[i]].push_back ({ V[i], K[i] });
    }

    vector<int> widx = { 0 };

    for (int i = 1; i <= 2000; ++i) {
        if (vals[i].size () > 0)
            widx.push_back (i);
    }

    for (int i = 1; i < widx.size (); ++i) {
        auto &v = vals[widx[i]];
        sort (v.begin (), v.end (), greater<> ());

        for (int j = 1; j <= S; ++j) {
            dp[i][j] = dp[i - 1][j];

            int vsum = 0;
            int vi   = 0;

            for (int k = 1; j >= k * widx[i] && k <= v.size (); ++k) {
                vsum += v[k - 1].first;
                if (v[k - 1].second == 1)
                    ++vi;
                else
                    --v[k - 1].second;

                dp[i][j] = max (dp[i][j], dp[i - 1][j - k * widx[i]] + vsum);
            }

            // printf ("%lld ", dp[i][j]);
        }
        // putchar ('\n');
    }

    printf ("%lld\n", dp[widx.size () - 1][S]);

    return 0;
}

Compilation message (stderr)

knapsack.cpp: In function 'int main()':
knapsack.cpp:20:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |     freopen ("test.in", "r", stdin);
      |     ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
knapsack.cpp:23:11: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |     scanf ("%lld%lld", &S, &N);
      |     ~~~~~~^~~~~~~~~~~~~~~~~~~~
knapsack.cpp:26:15: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   26 |         scanf ("%lld%lld%lld", &V[i], &W[i], &K[i]);
      |         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...