Submission #1267086

#TimeUsernameProblemLanguageResultExecution timeMemory
1267086minhmc2019Knapsack (NOI18_knapsack)C++17
73 / 100
1094 ms15944 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(3, vector<int>(S + 3)); 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 & 1][k] = dp[(i - 1) & 1][k]; if (k >= w) { dp[i & 1][k] = max(dp[i & 1][k], dp[(i - 1) & 1][k - w] + v); } } } // // FOR(i, 1, sz, 1) { // FOR(k, 0, S, 1) { // cout << dp[i][k] << " "; // } // cout << '\n'; // } cout << dp[sz & 1][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(); }

Compilation message (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...