Submission #1266714

#TimeUsernameProblemLanguageResultExecution timeMemory
1266714WH8Knapsack (NOI18_knapsack)C++20
100 / 100
88 ms6540 KiB
#include <bits/stdc++.h> using namespace std; #define iloop(x, n) for (long long i = x; i < n; ++i) #define jloop(x, n) for (long long j = x; j < n; ++j) #define kloop(x, n) for (long long k = x; k < n; ++k) #define dloop(x, n) for (long long d = x; d >= n; --d) #define ll long long #define int long long #define pll pair<int, int> #define pii pair<int, int> #define iii tuple<int, int, int> #define vi vector<long long> #define mp make_pair #define pb push_back #define f first #define s second #define endl '\n' #define g0(a) get<0>(a) #define g1(a) get<1>(a) #define g2(a) get<2>(a) #define g3(a) get<3>(a) #define dg(x) cout << #x << ": " << x << endl #define all(x) x.begin(), x.end() #define FASTIO \ ios::sync_with_stdio(false); \ cin.tie(0); \ cout.tie(0); int32_t main(){ //~ FASTIO int s, n; cin >> s>>n; int valt[n+1], weit[n+1], numt[n+1]; int val[n+1], wei[n+1], num[n+1]; int st[n]; iloop(1, n+1) st[i-1] = i; iloop(0, n) { cin >> valt[i+1] >> weit[i+1]>> numt[i+1]; //~ cin >> weit[i+1]>> valt[i+1];// >> numt[i+1]; } wei[0] = -1; sort(st, st+n, [&](int a, int b){ if (weit[a] == weit[b]){ return valt[a] > valt[b]; } else return weit[a] < weit[b]; }); //iloop(0, n) cout << st[i] << " "; iloop(1, n+1){ val[i] = valt[st[i-1]]; wei[i] = weit[st[i-1]]; num[i] = numt[st[i-1]]; } //~ for(int i=1;i<=n;i++){ //~ cout<<val[i]<<" "<<wei[i]<<" "<<num[i]<<"\n"; //~ } int csm = 0; vector<pll> items; iloop(1, n+1){ if (wei[i] != wei[i-1]) { csm = 0; } while (csm <= s and num[i]){ items.pb({wei[i], val[i]}); num[i]--, csm+=wei[i]; } } int mem[2005]; fill(mem, mem+2005, 0); //~ for(auto [w,v]:items){ //~ printf("%lld %lld\n",w,v); //~ } /*iloop(1, u+1){ cout << endl<< i << " " << wgt[i] << endl; for (auto it : hm[i]) cout << it << " "; cout << endl; } dg(u);*/ for(auto [w, v] : items){ for(int j=s;j>=1;j--){ mem[j]=max(mem[j], (j-w >=0?mem[j-w]+v:0)); } } /*iloop(0, u+1){ jloop(0, s+1) cout << mem[i][j] << " "; cout << endl; }*/ cout << mem[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...