Ecco il codice:
codice:
private static boolean ricavabile(int[] v, int x) {
		boolean b[] = new boolean[v.length];
		int i, exp, acc;
		for(i=0; i<b.length; i++)
			b[i] = false;
		i=1;
		exp = (int) Math.pow(2, v.length);
		while(i<=exp){
			acc=0;
			for(int j=0; j<v.length; j++)
				if(b[j]) acc+=v[j];
			if(acc==x)
				return true;


			for(int j=0; j<v.length; j++)
				if(i%(int) Math.pow(2, j)==0)
					b[j] = !b[j];
			i++;
		}
		return false;
	}
Se avete suggerimenti per migliorare le prestazioni dite pure.
Avevo pensato di ordinare l'array e poi, in caso acc>x ritornare falso, ma per piccoli array il tempo utilizzato per ordinarlo è superiore al tempo risparmiato.