Loading...
공집합 (아무것도 안 고름)의 합은 으로 본다. 따라서 이면 공집합이 답이 된다.
개의 원소가 있을 때 부분집합은 개이다. 각 부분집합을 비트 정수 로 표현하자. 의 번째 비트가 1이면 "번 원소를 골랐다"는 뜻이다.
for (int mask = 0; mask < (1 << N); mask++) {
long long sum = 0;
for (int i = 0; i < N; i++) {
if (mask & (1 << i)) sum += A[i];
}
if (sum == K) { ans = 1; break; }
}
총 시간 복잡도는 . 이면 이라 1초 안.
입력 1
4 7
3 1 4 2
출력 1
YES
설명: 의 합이 7.
입력 2
4 100
3 1 4 2
출력 2
NO
설명: 전체 합이 10밖에 안 된다.
입력 3
5 0
1 -2 3 -4 5
출력 3
YES
설명: 공집합 (아무것도 안 고름)이 합 0이라 항상 YES. 또는 가 합 2... 아니, 가 합 3... 같은 식은 없다. 공집합으로 0을 만든다.
입력 4
1 5
5
출력 4
YES