/*
首先算出所有队伍至少都有A 1道的概率sum.
再算出只A 1~n-1的概率t2
答案就是sum-t2咯
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define M 31
#define T 1001
using namespace std;
double dp[T][M][M];//dp[i][j][k] 表示第i个队伍前k道题A了j道..
double map[M],sum,t2,tt;
int m,t,n;
int main()
{
freopen("test.txt","r",stdin);
while(scanf("%d%d%d",&m,&t,&n)&&m!=0&&t!=0&&n!=0)
{
memset(dp,0,sizeof(dp));
sum=1;
t2=1;
for(int i=1;i<=t;i++)
{
dp[i][0][0]=1;//明显前0道题A零道德概率为0
for(int j=1;j<=m;j++)
{
scanf("%lf",&map[j]);
}
for(int j=1;j<=m;j++)
{
for(int k=j;k>=1;k--)
{
dp[i][k][j]=dp[i][k-1][j-1]*map[j]+dp[i][k][j-1]*(1-map[j]);
}
dp[i][0][j]=dp[i][0][j-1]*(1-map[j]);
}
}
for(int i=1;i<=t;i++)
{
sum*=1-dp[i][0][m];
}
for(int i=1;i<=t;i++)
{
tt=0;
for(int j=1;j<n;j++)
{
tt+=dp[i][j][m];
}
t2*=tt;
}
printf("%.3f\n",sum-t2);
}
}
POJ2151-Check the difficulty of problems
最新推荐文章于 2019-09-10 09:15:12 发布