N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오.
#include <iostream>
using namespace std;
static constexpr int MAX = 20;
static int N, S, result;
static int arr[MAX];
void solve(int idx, int sum){
sum += arr[idx]; //우선 해당 숫자를 더한다
if (idx >= N) return; // [기저1] - 범위 초과시 return
if (sum == S) result++; // [기저2] - S를 찾은 경우 경우의 수 추가
solve(idx + 1, sum - arr[idx]); // idx번 요소를 더하지 않는 경우
solve(idx + 1, sum); // idx번 요소를 더하는 경우
}
int main() {
cin >> N >> S;
for (int i = 0; i < N; i++) cin >> arr[i];
solve(0, 0);
cout << result << endl;
}