求每只队伍都回答出题目,且至少有一只队伍回答出n道题的概率
存在性问题我们可以转化为任意性问题
用P(每支队伍都回答出题目)-P(每只队伍回答的题目数小于n)
然后我们可以递推求解
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 var f:array[0..1010,0..35,0..35] of double; 2 p:array[0..1010,0..35] of double; 3 k,i,j,n,m,t:longint; 4 s,ans,tmp:double; 5 6 begin 7 while not eof do 8 begin 9 readln(n,t,m); 10 if (n=0) and (t=0) and (m=0) then break; 11 for i:=1 to t do 12 begin 13 for j:=1 to n do 14 read(p[i,j]); 15 readln; 16 end; 17 fillchar(f,sizeof(f),0); 18 for i:=1 to t do 19 begin 20 f[i,0,0]:=1; 21 for j:=1 to n do 22 begin 23 f[i,j,0]:=f[i,j-1,0]*(1-p[i,j]); 24 for k:=1 to j do 25 f[i,j,k]:=f[i,j-1,k-1]*p[i,j]+f[i,j-1,k]*(1-p[i,j]); //f[i,j,k]表示第i支队前j道题答出k题的概率 26 end; 27 end; 28 ans:=1; 29 for i:=1 to t do 30 ans:=ans*(1-f[i,n,0]); 31 tmp:=1; 32 for i:=1 to t do 33 begin 34 s:=0; 35 for j:=1 to m-1 do 36 s:=s+f[i,n,j]; //答出题目出数<n满足加法原理 37 tmp:=tmp*s; //每队都小于满足乘法原理 38 end; 39 ans:=ans-tmp; 40 writeln(ans:0:3); 41 end; 42 end.