1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.
www.acmicpc.net
[ 백준 1182번 부분수열의 합 소스코드 - 비트마스크 ]
#include <iostream>
using namespace std;
int a[20];
int main() {
int n,s;
cin >> n >> s;
for (int i=0; i<n; i++) {
cin >> a[i];
}
int ans = 0;
//전체집합 = (1<< n)-1 공집합은 제외
for (int i=1; i<(1<<n); i++) {
int sum = 0;
for (int k=0; k<n; k++) {
if ( i&(1<<k)) {
sum += a[k];
}
}
if (sum == s) {
ans += 1;
}
}
cout << ans << '\n';
return 0;
}
'백준 문제풀이' 카테고리의 다른 글
백준 10828 - 스택이란? (0) | 2023.09.07 |
---|---|
백준 1260 - dfs와 bfs - 비재귀(스택 큐사용) (1) | 2022.10.11 |
백준 2531번 회전초밥 소스 코드 (0) | 2022.01.06 |
백준 2805번 - 나무 자르기 (0) | 2021.12.17 |
백준 2622번 - 삼각형만들기 (0) | 2021.12.10 |