제출 #1289705

#제출 시각아이디문제언어결과실행 시간메모리
1289705maithedungKnapsack (NOI18_knapsack)C++20
73 / 100
1098 ms16964 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' #define fast ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define exit return 0 #define cap pair<int,int> #define fi first #define se second #define pb push_back #define FOR(i,l,r) for(int i=l;i<=r;i++) #define FOD(i,r,l) for(int i=r;i>=l;i--) #define fill(f,x) memset(f,x,sizeof(f)) #define lcm(a,b) (a/__gcd(a,b)*b) #define TIME 1.0 * clock() / CLOCKS_PER_SEC int n,W; int dp[1000005]; signed main() { fast; cin>>W>>n; vector<cap> vt; vt.push_back({0,0}); FOR(i,1,n) { int v,w,k; cin>>v>>w>>k; int tmp=0; k=min(k,W/w); while(k-(1<<tmp)>=0) { k-=(1<<tmp); vt.push_back({v*(1<<tmp),w*(1<<tmp)}); tmp+=1; } if(k>0) vt.push_back({v*k,w*k}); } int n=vt.size()-1; FOR(i,1,n) { int w=vt[i].second; int v=vt[i].first; FOD(j,W,w) { if(w<=j) dp[j]=max(dp[j],dp[j-w]+v); } } cout<<dp[W]; exit; } /* ░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒▒▓███▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░ */
#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...