poj2151

求每只队伍都回答出题目,且至少有一只队伍回答出n道题的概率
存在性问题我们可以转化为任意性问题
用P(每支队伍都回答出题目)-P(每只队伍回答的题目数小于n)
然后我们可以递推求解

 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.
View Code
原文地址:https://www.cnblogs.com/phile/p/4473123.html