Reverse Engineer Polling Statistics
Python, 154
 
def p(x):
 n=[1]*len(x);d=2;r=lambda z:round(1000.*z/d)/10
 while 1:
    if(map(r,n),sum(n))==(x,d):return d
    d+=1
    for i in range(len(x)):n[i]+=r(n[i])&lt;x[i]

It works for the last example now.
Example runs:
&gt;&gt;&gt; p([44.4, 44.4, 11.1])
9
&gt;&gt;&gt; p([26.7, 53.3, 20.0])
15
&gt;&gt;&gt; p([48.4, 13.7, 21.6, 6.5, 9.8])
153
&gt;&gt;&gt; p([0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 99.6])
2000
&gt;&gt;&gt; p([0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 98.7])
667
&gt;&gt;&gt; p([0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 98.7])
2000
&gt;&gt;&gt; p([0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 97.8])
401