#include<cstdio>
#include<cstring>
double dp[1010][36][36];
double p[1010][36];
int main()
{
int m,t,k;
while(~scanf("%d%d%d",&m,&t,&k)&&(m+t+k))
{
double p1=1,p2=1;
memset(dp,0,sizeof(dp));
for(int i=1;i<=t;i++)
for(int j=1;j<=m;j++)
scanf("%lf",&p[i][j]);
for(int i=1;i<=t;i++)
{
double tem=1;
for(int j=1;j<=m;j++)
tem*=(1-p[i][j]);
p1*=(1-tem);
}
for(int i=1;i<=t;i++)
{
dp[i][0][0]=1;
for(int j=1;j<=m;j++)
{
for(int k=1;k<=j;k++)
dp[i][j][k]=dp[i][j-1][k]*(1-p[i][j])+dp[i][j-1][k-1]*p[i][j];
dp[i][j][0]=dp[i][j-1][0]*(1-p[i][j]);
}
}
for(int i=1;i<=t;i++)
{
double tem=0;
for(int j=1;j<=k-1;j++)
tem+=dp[i][m][j];
p2*=tem;
}
printf("%.3f\n",p1-p2);
}
}
poj 2151 概率DP
最新推荐文章于 2020-11-21 20:14:24 发布