반응형

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

 

1182번: 부분수열의 합

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net

 

모든 부분수열의 합이 s와 일치할 때 ans을 1씩 증가시켜줬습니다.

 

#include <iostream>
#include <algorithm>
#define INF 987654321
using namespace std;
int n, s, a[20], ans = 0;
void f(int idx, int sum, int c) {
	if (c == n) return;
	for (int i = idx; i < n; i++) {
		int ns = sum + a[i];
		if (s == ns) ans++;
		f(i + 1, ns, c + 1);
	}
}

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

'Algorithm' 카테고리의 다른 글

백준 11723 : 집합  (0) 2021.11.11
백준 15658 : 연산자 끼워넣기 (2)  (0) 2021.11.11
백준 10971 : 외판원 순회 2  (0) 2021.11.11
백준 10819 : 차이를 최대로  (0) 2021.11.11
백준 10974 : 모든 순열  (0) 2021.11.11

+ Recent posts