제출 #866708

#제출 시각아이디문제언어결과실행 시간메모리
866708jlassKnapsack (NOI18_knapsack)C++17
100 / 100
64 ms35304 KiB
// https://oj.uz/problem/view/NOI18_knapsack #include <bits/stdc++.h> typedef long long ll; typedef long double ld; using namespace std; const ll MOD = 1e9 + 7; template<typename T> std::ostream& operator<<(std::ostream& os, const vector<vector<T>> adj) { for(auto &x : adj) { for(auto &y : x) os << y << " "; os << "\n"; } return os; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int s, n; cin >> s >> n; vector<vector<pair<int,int>>> items(s+1); for(int i = 0; i < n; i++) { int v, w, k; cin >> v >> w >> k; items[w].push_back({v,k}); } //for each weight, store the maximum weight taking 1-n items vector<vector<int>> weights(s+1, vector<int>(s+1)); for(int i = 1; i <= s; i++) { sort(items[i].begin(),items[i].end()); for(int j = 1; j <= s && items[i].size(); j++) { weights[i][j] = weights[i][j-1] + items[i].back().first; items[i].back().second--; if(items[i].back().second == 0) items[i].pop_back(); } } // cout << "weights: " << endl; // cout << weights << "\n"; vector<vector<int>> dp(s + 1, vector<int>(s+1)); for(int i = 1; i <= s; i++) {//trying weight i for(int j = 1; j <= s; j++) {//trying with current shopping cart weight j dp[i][j] = dp[i-1][j]; for(int k = 1; j - k * i >= 0; k++) { //taking k items dp[i][j] = max(dp[i][j], dp[i-1][j - k * i] + weights[i][k]); } } } // cout << "dp\n"; // cout << dp << "\n"; cout << *max_element(dp[s].begin(),dp[s].end()) << "\n"; 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...