sub f{ my($u,$s)=@_; $h{$u,$s}//=do{ if($u==(1<<$n)-1){ $s>0; }else{ my $p=0; for(0..$n-1){ if(!($u&1<<$_)){ my $x=$a[$_]; my $r; my $q=$x==1?1- f($u|1<<$_,-$s-2):($r=(1/$x)*1/(1-(1-1/$x)**2))*(1- f($u|1<<$_,-$s-$x*2)) + (1-$r)*f($u|1<<$_,$s-$x*2); $p=$q if $p<$q; } } $p; } } } $n=<>; @a=glob<>; print f(0,-1);