Ecco il codice:
Se avete suggerimenti per migliorare le prestazioni dite pure.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; }
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.


Rispondi quotando