Submission #976145

#TimeUsernameProblemLanguageResultExecution timeMemory
976145vjudge1Knapsack (NOI18_knapsack)C++17
73 / 100
745 ms600 KiB
#include <bits/stdc++.h> #define int long long #define f first #define s second #define pb push_back #define endl '\n' using namespace std; int S,N,V,W,K,dp[2002],ans; map<pair<int, int>, int> m; void solve() { cin >> S >> N; dp[0] = 0; for (int i = 1; i <= S; i++) dp[i] = -1e9; if (N > 100) { for (int i = 1; i <= N; i++) { cin >> V >> W >> K; K = min(K, S / W); if (m.count({W, K})) m[{W, K}] = max(m[{W, K}], V); else m[{W, K}] = V; } for (auto cur : m) { V = cur.s; W = cur.f.f; K = cur.f.s; // cout << V << ' ' << W << ' ' << K << endl; if (K >= 1000) { for (int j = W; j <= S; j++) { dp[j] = max(dp[j], dp[j - W] + V); } } else { while (K--) { for (int j = S; j >= W; j--) { dp[j] = max(dp[j], dp[j - W] + V); } } } } } else { for (int i = 1; i <= N; i++) { cin >> V >> W >> K; K = min(K, S / W); while (K--) { for (int j = S; j >= W; j--) { dp[j] = max(dp[j], dp[j - W] + V); } } } } for (int i = 0; i <= S; i++) ans = max(ans, dp[i]); cout << ans << endl; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); int tttt = 1; //cin >> tttt; while (tttt--) solve(); }
#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...