Submission #1295525

#TimeUsernameProblemLanguageResultExecution timeMemory
1295525michaeltaranikKnapsack (NOI18_knapsack)C++17
37 / 100
2 ms580 KiB
#include <iostream> #include <limits.h> #include <vector> #include <array> using namespace std; // int solvedp(int goal, vector<array<int, 2>>& items, vector<vector<int>>& memo, int idx) { // if (goal < 0) return INT_MIN; // if (goal == 0 || idx >= items.size()) return 0; // if (memo[goal][idx] != -1) return memo[goal][idx]; // int skip = solvedp(goal, items, memo, idx+1); // int take = solvedp(goal - items[idx][W], items, memo, idx+1); // if (take >= 0) { // take += items[idx][V]; // } // int best = max(skip, take); // memo[goal][idx] = best; // return best; // } void solve() { int s, n; cin >> s >> n; vector<int> dp(s+1, 0); for (int i = 0; i < n; ++i) { int v, w, q; cin >> v >> w >> q; // fucking binary optimization for (int k = 1; q > 0; k <<= 1) { int take = min(k, q); int chunkV = take * v; int chunkW = take * w; if (chunkW <= s) { for (int j = s; j >= chunkW; --j) { dp[j] = max(dp[j], dp[j - chunkW] + chunkV); } } q -= take; } } cout << dp[s] << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); 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...