Submission #1306637

#TimeUsernameProblemLanguageResultExecution timeMemory
1306637maximusaureliusKnapsack (NOI18_knapsack)C++20
100 / 100
117 ms128352 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using vi = vector<int>; using ii = pair<int, int>; using str = string; #define pb push_back #define mp make_pair #define all(x) begin(x), end(x) #define sz(x) (int) (x).size() #define f first #define s second #define endl "\n" constexpr ll MOD = 1000000007; void setIO(string name = "") { ios::sync_with_stdio(0); cin.tie(0); if (sz(name)) { freopen((name + ".in").c_str(), "r", stdin); freopen((name + ".out").c_str(), "w", stdout); } } int main() { setIO(); int S; cin >> S; int n; cin >> n; vector<vi> a_or(n); vector<vi> a1; for (int i = 0; i < n; i++) { int v, w, k; cin >> v >> w >> k; a_or[i] = {w,-v,k}; } sort(all(a_or)); a_or.pb({100000000,0,0}); int cur_w = a_or[0][0]; int cur_added = 0; // evtl doppelte? schlechter? for (int i = 0; i < n; i++) { if (a_or[i][0] > cur_w) { cur_w=a_or[i][0]; cur_added=0; } if (cur_w == 100000000) break; if (cur_added+a_or[i][2] <= S / cur_w) { a1.pb({a_or[i][0],a_or[i][1],a_or[i][2]}); cur_added+=a_or[i][2]; } else if (S / cur_w - cur_added > 0){ a1.pb({a_or[i][0],a_or[i][1],S / cur_w - cur_added}); cur_added+=S / cur_w - cur_added; } } vector<ii> test1; for (const auto& aa: a1) { for (int i = 0; i < aa[2]; i++) { test1.pb(mp(aa[0],-aa[1])); } } //dp vector<vi> dp(sz(test1)+1, vi(S+1,0)); for (int i = 0; i < sz(test1); i++) { for (int j = S; j >= 0; j--) { dp[i+1][j] = dp[i][j]; if (j - test1[i].f >= 0)dp[i+1][j] = max(dp[i+1][j],dp[i][j-test1[i].f]+test1[i].s); } } cout << dp[sz(test1)][S] << endl; return 0; }

Compilation message (stderr)

knapsack.cpp: In function 'void setIO(std::string)':
knapsack.cpp:22:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |         freopen((name + ".in").c_str(), "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
knapsack.cpp:23:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         freopen((name + ".out").c_str(), "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...