// ¿Algún subconjunto de un arreglo suma un valor dado?
#ifndef SUBSET_SUM_H
#define SUBSET_SUM_H

// Devuelve 1 si algún subconjunto de values[0..n-1] suma exactamente target. El subconjunto
// vacío suma 0. Los valores pueden ser negativos.
//
// Busca con un árbol de dos ramas por elemento: con él y sin él. Un nodo es una llamada a la
// función recursiva, y se cuenta al entrar, incluida la primera. El total queda en *nodes.
// Se detiene en cuanto encuentra un subconjunto, así que sin solución visita todo el árbol.
int subset_sum(const int *values, int n, int target, long *nodes);

#endif
