제출 #1241647

#제출 시각아이디문제언어결과실행 시간메모리
1241647tritranminh2808Knapsack (NOI18_knapsack)C++20
100 / 100
36 ms5448 KiB
#include <bits/stdc++.h> using namespace std; #define int long long bool cmp(pair <int,int> a, pair <int, int > b){ return a.first > b.first; } vector< pair< int , int>> g[100005]; int dp[100005]; signed main(){ ios::sync_with_stdio(0); cin.tie(0); int s,n;cin>>s>>n; for(int i=0;i<n;i++){ int v,k,w; cin >> v >> w >> k; if(w<=s)g[w].push_back({v,k}); } vector<pair<int,int>> a; for(int w=1;w<=s;w++){ auto& dsach = g[w]; if(dsach.empty()) continue; sort(dsach.begin(), dsach.end(), cmp); int sech = s/w, lay = 0; for(auto p : dsach){ int v = p.first, k = p.second; int c = min(k, sech - lay); for(int i = 0; i < c; i++) a.push_back({w, v}); lay += c; if(lay >= sech) break; } } for(auto i:a){ int w = i.first; int v = i.second; for(int j = s; j >= w; j--) dp[j] = max(dp[j], dp[j-w] + v); } cout<<dp[s]; }
#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...