import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int s = sc.nextInt();
int[] num = new int[n];
for (int i=0;i<n;i++) {
num[i] = sc.nextInt();
}
// 비트마스크 - 브루트포스
// 만들 수 있는 부분 집합들의 경우의 수들을 정수로 표현했음 (공집합 제외)
// 1부터 2^n까지
int cnt = 0; // 부분 수열의 합이 같은 경우의 수를 세기 위한 변수
for (int i=1;i<(1<<n);i++) { // 만들 수 있는 모든 부분 집합들에 대해 반복
int sum = 0;
for (int j=0;j<n;j++) {
if((i&(1<<j)) != 0) { // 정수로 표현한 부분 집합 i에 j가 들어있다면
sum += num[j];
}
}
if (sum == s) { // 해당 부분집합 i에 들어있는 모든 정수들을 더한 값이 s와 같으면
cnt+=1;
}
}
System.out.println(cnt);
}
}
'알고리즘 > 백준 알고리즘(JAVA)' 카테고리의 다른 글
JAVA)13023번 ABCED - 그래프(인접 행렬, 인접 리스트, 간접 리스트) (0) | 2020.08.17 |
---|---|
JAVA)14391번 종이 조각 - 브루트 포스, 비트마스크 (0) | 2020.08.12 |
JAVA)10974번 모든 순열 - 브루트 포스, 순열 (0) | 2020.08.05 |
JAVA)10973번 이전 순열 - 브루트 포스, 순열 (0) | 2020.08.05 |
JAVA)10972번 다음 순열 - 브루트 포스, 순열 (0) | 2020.08.05 |
알고리즘/백준 알고리즘(JAVA) 카테고리의 다른 글
JAVA)13023번 ABCED - 그래프(인접 행렬, 인접 리스트, 간접 리스트)
JAVA)14391번 종이 조각 - 브루트 포스, 비트마스크
JAVA)10974번 모든 순열 - 브루트 포스, 순열
JAVA)10973번 이전 순열 - 브루트 포스, 순열