https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWHPkqBqAEsDFAUn&categoryId=AWHPkqBqAEsDFAUn&categoryType=CODE



0점은 무조건 받을 수 있기 때문에 초기에 백터에 0을 넣어준다.


이후에 문제의 배점별 점수를 받으면서, 백터에 존재하는 점수와 더해주고,


더해진 점수가 그 백터에 들어있지 않다면 점수를 추가해준다.


더해지는 점수가 백터에 포함되어 있는지 매번 백터를 돌면서 확인하지 않기 위해 숫자를 사용했는지 여부를


담는 배열을 만들어서 확인한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#pragma warning(disable :4996)
#include<iostream>
#include<vector>
using namespace std;
bool vis[10001]; //최대 만점
int n;
vector<int> v;
int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin >> T;
    
    for (int tc = 1; tc <= T; tc++) {
        cin >> n;
        
        v.push_back(0);
        vis[0= true;
        int val;
        for (int i = 0; i < n; i++) {
            cin >> val;
            int curSize = v.size(); //새로운 숫자 넣기 직전에 백터 크기
            for (int j = 0; j < curSize; j++) {
                int candi = val + v[j]; //추가될 수 있는 수
                if (!vis[candi]) { //이미 추가된 수면 pass
                    v.push_back(candi);
                    vis[candi] = true;
                }
            }
        }
        cout  << '#' << tc << ' ' << v.size() << '\n';
        v.clear();
        for (int i = 0; i <= 10000; i++)
            vis[i] = false;
    }
    
    return 0;
}
cs


+ Recent posts