Counting the number of subsets with positive sum
Suppose that you could solve this in $T(n)$. Given a list of positive integers $a_1,\ldots,a_n$ and a target $T$, consider the two instances $a_1,\ldots,a_n,-T$ and $a_1,\ldots,a_n,-T+1$. Denoting by $N(\cdots)$ the number of positive sums, we get:


$N(a_1,\ldots,a_n,-T)$ is the number of subsets of $\{a_1,\ldots,a_n\}$ whose sum is larger than $T$.
$N(a_1,\ldots,a_n,-T+1)$ is the number of subsets of $\{a_1,\ldots,a_n\}$ whose sum is at least $T$.


By comparing these two numbers, you can solve SUBSET-SUM in time $T(n+1)$.

(There are some potential differences in the computation models, that I leave you to ponder.)

There is a simple $O(2^{n/2})$ algorithm, which proceeds as follows. We break the array $s_1,\ldots,s_n$ into two equal halves. We compute an ordered list $A_1,\ldots,A_{2^{n/2}}$ of all sums of the first half, and an ordered list $B_1,\ldots,B_{2^{n/2}}$ of all sums of the second half. This takes time $O(2^{n/2})$ if done carefully (by iterative merging). We put a pointer $j$ at $B_{2^{n/2}}$, and decrease it until $A_1 + B_j \le 0$. The value of $j$ tells us the number of pairs $(1,j')$ satisfying $A_1 + B_j &gt; 0$. Then we do the same for $A_2$ &mdash; note that we can start the scan at the current value of $j$; and so on. This phase also takes $O(2^{n/2})$.