답안 #853659

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
853659 2023-09-25T00:31:06 Z Dawae12321 Knapsack (NOI18_knapsack) C++14
29 / 100
4 ms 1884 KB
#include <bits/stdc++.h>
using namespace std;

struct item{
    int value, weight, quantity;
};



int main(){
    int S, N;
    cin >> S >> N; //S is maximum weight, N is total # of items
    item items[N];
    for(int i = 0; i < N; i++){
        cin >> items[i].value >> items[i].weight >> items[i].quantity;
    }

    pair<int,int> maxval[N][S+1]; //first is current value, second is current weight

    for(auto &element:maxval){
        for(auto &e : element){
            e = {0,0};
        }
    }

    for(int j = 0; j <= S; j++){
        maxval[0][j].first = min(items[0].quantity, int(j/items[0].weight)) * items[0].value;
        maxval[0][j].second = items[0].weight * min(items[0].quantity, int(j/items[0].weight));
    }

    for(int i = 1; i < N; i++){
        for(int j = 0; j <= S; j++){
            int add_new = min(items[i].quantity, (j-maxval[i-1][j].second)/items[i].weight); //with each you can either
            int reform = min(items[i].quantity, j/items[i].weight); //add to fill up or restart using that as the best
            int value1 = maxval[i-1][j].first + add_new*items[i].value;
            int value2 = reform * items[i].value + maxval[i-1][j-reform*items[i].weight].first;
            if(value1 > value2){
                maxval[i][j].first = value1;
                maxval[i][j].second = maxval[i-1][j].second + add_new*items[i].weight;
            }
            else if(value1 < value2){
                maxval[i][j].first = value2;
                maxval[i][j].second = items[i].weight * reform + maxval[i-1][j-reform*items[i].weight].second;
            }
            else{
                maxval[i][j].first = value1;
                maxval[i][j].second = min(maxval[i-1][j].second + add_new*items[i].weight, items[i].weight * reform + maxval[i-1][j-reform*items[i].weight].second);
            }
        }
    }

    cout << maxval[N-1][S].first;

    
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 4 ms 1884 KB Output is correct
3 Correct 3 ms 1884 KB Output is correct
4 Correct 3 ms 1880 KB Output is correct
5 Correct 3 ms 1880 KB Output is correct
6 Correct 3 ms 1884 KB Output is correct
7 Correct 4 ms 1880 KB Output is correct
8 Correct 3 ms 1884 KB Output is correct
9 Correct 3 ms 1880 KB Output is correct
10 Correct 3 ms 1880 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 4 ms 1884 KB Output is correct
3 Correct 3 ms 1884 KB Output is correct
4 Correct 3 ms 1880 KB Output is correct
5 Correct 3 ms 1880 KB Output is correct
6 Correct 3 ms 1884 KB Output is correct
7 Correct 4 ms 1880 KB Output is correct
8 Correct 3 ms 1884 KB Output is correct
9 Correct 3 ms 1880 KB Output is correct
10 Correct 3 ms 1880 KB Output is correct
11 Correct 0 ms 344 KB Output is correct
12 Correct 4 ms 1880 KB Output is correct
13 Correct 4 ms 1880 KB Output is correct
14 Correct 3 ms 1880 KB Output is correct
15 Correct 3 ms 1880 KB Output is correct
16 Incorrect 3 ms 1884 KB Output isn't correct
17 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 600 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 4 ms 1884 KB Output is correct
7 Correct 3 ms 1884 KB Output is correct
8 Correct 3 ms 1880 KB Output is correct
9 Correct 3 ms 1880 KB Output is correct
10 Correct 3 ms 1884 KB Output is correct
11 Correct 4 ms 1880 KB Output is correct
12 Correct 3 ms 1884 KB Output is correct
13 Correct 3 ms 1880 KB Output is correct
14 Correct 3 ms 1880 KB Output is correct
15 Correct 0 ms 344 KB Output is correct
16 Correct 4 ms 1880 KB Output is correct
17 Correct 4 ms 1880 KB Output is correct
18 Correct 3 ms 1880 KB Output is correct
19 Correct 3 ms 1880 KB Output is correct
20 Incorrect 3 ms 1884 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 600 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 4 ms 1884 KB Output is correct
7 Correct 3 ms 1884 KB Output is correct
8 Correct 3 ms 1880 KB Output is correct
9 Correct 3 ms 1880 KB Output is correct
10 Correct 3 ms 1884 KB Output is correct
11 Correct 4 ms 1880 KB Output is correct
12 Correct 3 ms 1884 KB Output is correct
13 Correct 3 ms 1880 KB Output is correct
14 Correct 3 ms 1880 KB Output is correct
15 Correct 0 ms 344 KB Output is correct
16 Correct 4 ms 1880 KB Output is correct
17 Correct 4 ms 1880 KB Output is correct
18 Correct 3 ms 1880 KB Output is correct
19 Correct 3 ms 1880 KB Output is correct
20 Incorrect 3 ms 1884 KB Output isn't correct
21 Halted 0 ms 0 KB -