Submission #1305929

#TimeUsernameProblemLanguageResultExecution timeMemory
1305929avsKnapsack (NOI18_knapsack)C++20
73 / 100
1096 ms1588 KiB
#include <bits/stdc++.h> using namespace std; int main() { int n, x; cin >> x >> n; vector<int> w(n), v(n), k(n); for (int i = 0; i < n; i++) cin >> v[i] >> w[i] >> k[i]; vector<long long> dp(x+1); for (int i = 0; i < n; i++) { if ((long long)k[i]*w[i] >= x) { for (int j = w[i]; j <= x; j++) dp[j] = max(dp[j], dp[j-w[i]]+v[i]); } else { int count = k[i]; for (int mul = 1; count > 0; mul <<= 1) { int take = min(mul,count); long long tw = (long long)take*w[i], tv = (long long)take*v[i]; for (int j = x; j >= tw; j--) dp[j] = max(dp[j],dp[j-tw]+tv); count -= take; } } } cout << dp.back(); }
#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...