-
[1182] 부분수열의 합BOJ 2021. 11. 10. 10:32
https://www.acmicpc.net/problem/1182
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
<문제>
항상 더하거나 유지하거나, 두가지로 분기된다.
s==0일때에는 공집합마저 하나로 카운트되므로, 이때에만 -1을 별도로 진행해주어야 한다.
2^20 == 100만정도이니, 단순히 완전탐색해줄 수 있다.
<소스코드>
1234567891011121314151617#include <bits/stdc++.h>using namespace std;int n, s, a[21];int f(int d, int sum) {if (d == n) return sum == s;return f(d + 1, sum + a[d]) + f(d + 1, sum);}int main(void) {cin >> n >> s;int i;for (i = 0; i < n; i++) cin >> a[i];if (s == 0)cout << f(0, 0) - 1;elsecout << f(0, 0);return 0;}cs 'BOJ' 카테고리의 다른 글
[3190] 뱀 (0) 2021.11.13 [1011] Fly me to the Alpha Centauri (0) 2021.11.12 [17503] 맥주 축제 (0) 2021.11.10 [13975] 파일 합치기 3 (0) 2021.11.09 [14395] 4연산 (0) 2021.11.09