제출 #1096575

#제출 시각아이디문제언어결과실행 시간메모리
1096575dostsKnapsack (NOI18_knapsack)C++17
73 / 100
1095 ms3976 KiB
//SİGUSMUS SEFEROĞLU #include <bits/stdc++.h> #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int MOD = 1e9+7,inf = 2e18; const int N = 2e5+50,Q = 2e5+50; int alloc[5000000]; struct MagicianArray { int ptr = 0; int sz = 0; inline int front() { return alloc[ptr]; } inline int back() { return alloc[ptr+sz-1]; } inline void push_back(int x) { alloc[ptr+sz] = x; sz++; } inline void pop_back() { sz--; } inline void pop_front() { ptr++; sz--; } }; void solve() { int n,w; cin >> w >> n; vi v(n+1),c(n+1),k(n+1); for (int i=1;i<=n;i++) cin >> v[i] >> c[i] >> k[i]; vi sack(w+1),sack2(w+1,-inf); sack2[0] = 0; MagicianArray dq; for (int i=1;i<=n;i++) { for (int jj = 0;jj<c[i];jj++) { dq.sz = dq.ptr = 0; for (int j = jj;j<=w;j+=c[i]) { while (dq.sz && k[i] < (j-dq.front())/c[i]) { dq.pop_front(); } while (dq.sz && (j-dq.back())/c[i]*v[i]+sack2[dq.back()] <= sack2[j]) { dq.pop_back(); } dq.push_back(j); sack[j] = (j-dq.front())/c[i]*v[i]+sack2[dq.front()]; } } sack.swap(sack2); } cout << *max_element(sack2.begin(),sack2.end()) << endl; } signed main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }
#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...