Submission #1298282

#TimeUsernameProblemLanguageResultExecution timeMemory
1298282rubykhoiKnapsack (NOI18_knapsack)C++20
73 / 100
1094 ms912 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; #define ffor(i,a,b) for(ll i=a;i<=b;i++) int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll s, n; cin >> s >> n; vector<ll> dp(s+1, 0); ffor(i,1,n){ ll v, w, k; cin >> v >> w >> k; vector<ll> prv = dp; ffor(r,0,w-1){ if(r > s) break; ll mmax = (s - r) / w; vector<ll> q_idx(mmax+5), q_val(mmax+5); ll head = 0, tail = 0; ffor(m,0,mmax){ ll j = r + m*w; ll cand = prv[j] - m*v; while(head < tail && q_val[tail-1] <= cand) tail--; q_idx[tail] = m; q_val[tail] = cand; tail++; while(head < tail && q_idx[head] < m - k) head++; ll best = q_val[head] + m*v; if(best > dp[j]) dp[j] = best; } } } ll ans = 0; ffor(i,0,s) ans = max(ans, dp[i]); cout << ans; 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...