제출 #866497

#제출 시각아이디문제언어결과실행 시간메모리
866497parlimoosKnapsack (NOI18_knapsack)C++14
100 / 100
66 ms6096 KiB
#pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std; #define ll long long #define ld long double #define pb push_back #define pp pop_back #define cl clear #define bg begin #define arr(x) array<ll , x> #define lb lower_bound #define ub upper_bound int s , n; vector<arr(3)> a; ll dp[2001]; vector<int> itms[2001]; bool ms[2001]; int main(){ ios::sync_with_stdio(false); cin.tie(0); cin >> s >> n; for(int i = 0 ; i < n ; i++){ int v , w , k; cin >> v >> w >> k; a.pb({v , w , k}); } sort(a.bg() , a.end() , [](arr(3) a , arr(3) b){ return (a[0] > b[0]); }); for(auto el : a){ if(itms[el[1]].empty() or (int)itms[el[1]].size() <= (s / el[1])){ int counter = el[2]; while((int)itms[el[1]].size() <= (s / el[1]) and counter-- > 0){ itms[el[1]].pb(el[0]); } } } ms[0] = true; for(int i = 1 ; i <= s ; i++){ for(int el : itms[i]){ for(int j = s ; j >= i ; j--){ if(!ms[j - i]) continue; dp[j] = max(dp[j] , dp[j - i] + el); ms[j] = true; } } } int inx = 0; for(int i = 1 ; i <= s ; i++){ if(dp[i] > dp[inx]) inx = i; } cout << dp[inx]; }
#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...