Submission #1286631

#TimeUsernameProblemLanguageResultExecution timeMemory
1286631ducmanh2612Knapsack (NOI18_knapsack)C++20
73 / 100
1094 ms1572 KiB
#include <bits/stdc++.h> using namespace std; int main() { int S, N; cin >> S >> N; int v[N + 1], w[N + 1], k[N + 1]; long long dp[S + 1]; memset(dp, 0, sizeof(dp)); for (int i = 1; i <= N; i++) cin >> v[i] >> w[i] >> k[i]; for (int i = 1; i <= N; i++) { int upperK = S / w[i]; upperK = min(upperK, k[i]); //binary splitting for (int j = 1; upperK > 0; j <<= 1) { int tmp = min(j, upperK); long long weight = tmp * w[i]; long long value = tmp * v[i]; for (int s = S; s >= weight; s--) { dp[s] = max(dp[s - weight] + value, dp[s]); } upperK -= tmp; } } cout << dp[S] << endl; }
#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...