제출 #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...