//poj 2151
//sep9
#include <iostream>
using namespace std;
int n,m,t;
double p[1024][35],dp[1024][35][35],s[1024][35];
int main()
{
while(scanf("%d%d%d",&m,&t,&n)==3){
if(!(n+m+t)) break;
for(int i=1;i<=t;++i)
for(int j=1;j<=m;++j)
scanf("%lf",&p[i][j]);
memset(dp,0,sizeof(dp));
for(int i=1;i<=t;++i){
dp[i][0][0]=1.0;
for(int j=1;j<=m;++j)
dp[i][j][0]=dp[i][j-1][0]*(1-p[i][j]);
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]);
s[i][0]=dp[i][m][0];
for(int k=1;k<=m;++k)
s[i][k]=s[i][k-1]+dp[i][m][k];
}
double p1=1.0,p2=1.0;
for(int i=1;i<=t;++i)
p1*=(s[i][m]-s[i][0]);
for(int i=1;i<=t;++i)
p2*=(s[i][n-1]-s[i][0]);
printf("%.3lf\n",p1-p2);
}
return 0;
}
poj 2151 Check the difficulty of problems 概率dp
最新推荐文章于 2022-08-07 21:32:21 发布