제출 #943581

#제출 시각아이디문제언어결과실행 시간메모리
943581tnknguyen_Knapsack (NOI18_knapsack)C++14
100 / 100
84 ms31600 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define pll pair<long long, long long> const int sz = 1e6 + 5; vector<pll> W[sz]; long long s, n; long long f[sz]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("main.inp", "r", stdin); //freopen("main.out", "w", stdout); cin>>s>>n; for(int i=1;i<=n;++i){ long long v, w, k; cin>>v>>w>>k; W[w].push_back({v, k}); } f[0] = 1; for(int i=1;i<=s;++i){ if(W[i].size() == 0){ continue; } sort(W[i].begin(), W[i].end(), greater<pll>()); for(int j=s;j>=i;--j){ long long sum = 0; int t = 0, cur = 1; for(int k=1;i*k<=j;++k){ sum += W[i][t].first; if(f[j - i*k] != 0){ f[j] = max(f[j], f[j - i*k] + sum); } if(cur == W[i][t].second){ cur = 1; t++; if(t >= (int)W[i].size()){ break; } } else{ cur++; } } cout<<endl; } } long long ans = 0; for(int i=1;i<=s;++i){ ans = max(ans, f[i]); } cout<<ans - 1; //f[0] = 1. 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...