본문 바로가기

백준 문제풀이/Bruteforcing

[C++] 백준 문제풀이 (Bruteforcing) 14225 부분수열의 합

 

 

https://www.acmicpc.net/problem/14225

 

14225번: 부분수열의 합

수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들

www.acmicpc.net

 

 

//[C++] 백준 문제풀이 (Bruteforcing)

#include <bits/stdc++.h>


int n;
int arr[21];
bool sums[2000001];

void dfs(int depth, int sum){
    if (depth == n){
        sums[sum] = true;
        return;
    }
    dfs(depth + 1, sum);
    dfs(depth + 1, sum + arr[depth]);
}


int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> n;
    for (int i = 0; i < n; ++i){
        std::cin >> arr[i];
    }

    dfs(0, 0);

    int i = 1;
    while(sums[i]){
        ++i;
    }
    std::cout << i << "\n";
    return 0;
}