부분 수열 합이 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;
}
'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 |