제출 #1178733

#제출 시각아이디문제언어결과실행 시간메모리
1178733petezaKnapsack (NOI18_knapsack)C++20
29 / 100
1 ms328 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int s, n, a, b, c; ll dpupd[2005], dpold[2005]; int cval[2005]; int main() { cin.tie(0) -> sync_with_stdio(0); cin >> s >> n; for(int i=1;i<=n;i++) { cin >> a >> b >> c; memset(cval, 0, sizeof cval); for(int cw = 0; cw + b <= s; cw++) { if(cval[cw] != c) { if(dpold[cw+b] < dpupd[cw] + a) { dpupd[cw+b] = dpupd[cw] + a; cval[cw+b] = cval[cw] + 1; } else { dpupd[cw+b] = dpold[cw+b]; cval[cw+b] = 0; } } else { if(dpold[cw] >= dpupd[cw] - a) { //use dpold if(dpold[cw+b] < dpold[cw] + a) { dpupd[cw+b] = dpold[cw] + a; cval[cw+b] = 1; } else { dpupd[cw+b] = dpold[cw+b]; cval[cw+b] = 0; } } else { //use dp new if(dpupd[cw+b] < dpupd[cw]) { dpupd[cw+b] = dpupd[cw]; cval[cw+b] = c; } else { dpupd[cw+b] = dpold[cw+b]; cval[cw+b] = 0; } } } } for(int k=0;k<2005;k++) dpold[k] = dpupd[k]; } cout << dpold[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...