부분 수열 합이 S가 되었다고 해도 끝까지 확인을 해보면 또 다시 S가 나올 수 있다.
처음에 S가 0일 경우가 있을 수도 있다. 따라서 합을 레이어가 시작할 때 구한다.
#include <iostream>
#define MAXN 20
using namespace std;
int N, S, cnt =0 ;
long long A[MAXN];
void input(){
cin >> N >> S;
int i = 0;
while(i < N)
cin >> A[i++];
}
void solve(long long sum , int index){
sum += A[index];
if(index >= N)
return;
if(sum == S )
cnt++;
solve( sum -A[index], index+1);
solve(sum, index+1);
}
int main() {
input();
solve(0,0);
cout << cnt << endl;
return 0;
}
백준 1182번 부분집합의 합
문제 링크입니다: https://www.acmicpc.net/problem/1182 부분집합의 합을 구할 때 해당 인덱스에 있는 숫자를 더하는 경우가 있고 안 더하는 경우가 있는데 이를 모두 고려해준다면 쉽게 답을 구할 수 있
jaimemin.tistory.com
백준 1182번 - 부분수열의 합 (python)
https://www.acmicpc.net/problem/1182 완전정복 문제들을 보다보면 숫자의 순서를 고려하는 경우가 있고(...
blog.naver.com
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 1535 안녕 (0) | 2021.05.24 |
---|---|
[BOJ] 1261 알고스팟 (0) | 2021.05.21 |
[BOJ] 6603 로또 (0) | 2021.05.15 |
[BOJ] 11057 오르막 수 (0) | 2021.05.10 |
[BOJ] 2011 암호코드 (0) | 2021.04.26 |