반응형

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

 

나올 수 있는 모든 부분 수열의 합을 체크해준 뒤, 가장 작은 값을 구해주었습니다.

#include <cstdio>

int n, s[20], cnt[2000001] = { 0 }, ans = 1;

void dfs(int sum, int depth) {
	if (depth == n) {
		cnt[sum] = 1;
		return;
	}
	dfs(sum, depth + 1);
	dfs(sum + s[depth], depth + 1);
}

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) scanf("%d", &s[i]);
	dfs(0, 0);
	while (cnt[ans++]);
	printf("%d", ans - 1);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 2887 : 행성 터널  (0) 2021.11.16
백준 4386 : 별자리 만들기  (0) 2021.11.16
백준 2212 : 센서  (0) 2021.11.16
백준 4796 : 캠핑  (0) 2021.11.16
백준 1774 : 우주신과의 교감  (0) 2021.11.16

+ Recent posts