Submission #1220050

#TimeUsernameProblemLanguageResultExecution timeMemory
1220050pauloaphKnapsack (NOI18_knapsack)C++20
73 / 100
1094 ms16048 KiB
#include<iostream> #include<algorithm> #include <cmath> using namespace std; int main(){ int C; int n; cin >> C >> n; long long v, w, b; vector<long long> NW, NV; for(int i = 0; i < n; i++){ int x = 1; cin >> v >> w >> b; if(b*w > C){ b = C/w; } while(b > x){ b -= x; NW.push_back(x * w); NV.push_back(x * v); x = x << 1; } NW.push_back(w * b); NV.push_back(v * b); } long long dp[2][C+1]; int prev = 0, act = 1; // caso base : quando nao temos mais itens for ( int c = 0; c <= C; c++ ) dp[prev][c] = 0; for(int i = NW.size() - 1; i >= 0; i-- ){ for ( int c = 0; c <= C; c++ ){ dp[act][c] = dp[prev][c]; if(NW[i] <= c ) { dp[act][c] = max( dp[act][c], dp[prev][c - NW[i]] + NV[i] ); } } swap( act, prev ); } cout << dp[prev][C] << endl; return 0; }
#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...