제출 #1267084

#제출 시각아이디문제언어결과실행 시간메모리
1267084minhmc2019Knapsack (NOI18_knapsack)C++17
73 / 100
158 ms327680 KiB
#include <bits/stdc++.h>
#define FOR(i, l, r, x) for(int i = l; i <= r; i += x)
#define FOD(i, l, r, x) for(int i = l; i >= r; i -= x)
#define debug(x) cout << "[DEBUG]:  " << #x << " = " << x << endl;
#define _double_vector_ vector<vector<int>>
#define BIT(x) (1LL << (x))
#define pii pair<int, int>
#define fi first
#define se second
#define int long long
using namespace std;

const int N = 5e6 + 5;
const int mod = 1e9 + 7;

int S, n;
vector <pii> items;

void solve() {
    cin >> S >> n; items.reserve(N);
    FOR(_, 1, n, 1) {
        int v, w, k; cin >> v >> w >> k;
        int lim = min(S / w, k);

        if (lim == 0) continue;

        int tmp = __lg(lim);

        FOR(i, 0, tmp, 1) {
            int mul = min(BIT(i), k);
            int cur_v = v * mul;
            int cur_w = w * mul;

            items.push_back({cur_w, cur_v});

            k -= mul;
        }
    }

    int sz = items.size();

    _double_vector_ dp(sz + 5, vector<int>(S + 5));
    dp[0][0] = 0;


    int i = 0;
    for(const pii &x : items) {
        int w = x.fi;
        int v = x.se;

//        cout << v << " " << w << '\n';

        ++i;

        FOR(k, 0, S, 1) {
            dp[i][k] = dp[i - 1][k];
            if (k >= w) {
                dp[i][k] = max(dp[i][k], dp[i - 1][k - w] + v);
            }
        }

    }

//
//    FOR(i, 1, sz, 1) {
//        FOR(k, 0, S, 1) {
//            cout << dp[i][k] << " ";
//        }
//        cout << '\n';
//    }

    cout << dp[sz][S] << '\n';
}

signed main() {
    #define name "task"
    if (ifstream(name".inp")) {
        freopen(name".inp", "r", stdin);
        freopen(name".out", "w", stdout);
    }

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    solve();
}

컴파일 시 표준 에러 (stderr) 메시지

knapsack.cpp: In function 'int main()':
knapsack.cpp:78:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   78 |         freopen(name".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
knapsack.cpp:79:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |         freopen(name".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...