Broj realnih podnizova datog zbira, optimizacija

https://petlja.org/biblioteka/r/problemi/zbirka-napredni-nivo/broj_realnih_podnizova_datog_zbira
ovo je link zadatka, dobijam sve OK sem na poslednjem primeru TLE, da li neko zna jos neku optimizaciju da smisli

#include <bits/stdc++.h>

using namespace std;

double epsilon = 0.00001;

int counter = 0;

void Utility(double currsum, double x, int index, int n, double niz[])
{
    if(index == n)
    {
        if(abs(currsum - x) < epsilon) counter++;
        return ;
    }

    if(currsum - x >= epsilon)
    {
        return ;
    }

    Utility(currsum, x, index + 1, n, niz);

    Utility(currsum + niz[index], x, index + 1, n, niz);
}

int main()
{
    int n;

    double x;

    cin >> n;

    double niz[n];

    for(int i = 0; i < n; i++)
    {
        cin >> niz[i];
    }

    cin >> x;

    Utility(0, x, 0, n, niz);

    cout << counter;

    return 0;
}