题解:http://www.cnblogs.com/zhj5chengfeng/archive/2013/03/01/2939449.html
AC代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
double f[1100][31][31];
double g[1100][31];
double p[1100][31];
int main(){
int T, M, N;
while( scanf( "%d%d%d", &M, &T, &N ) && !( M == 0 && T == 0 && N == 0 ) ){
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++ ){
f[i][0][0] = 1;
for( int j = 1; j <= M; j++ ){
f[i][0][j] = 0;
}
}
for( int i = 1; i <= T; i++ ){
for( int j = 1; j <= M; j++ ){
f[i][j][0] = f[i][j-1][0] * ( 1 - p[i][j] );
for( int k = 1; k <= j; k++ ){
f[i][j][k] = f[i][j-1][k] * ( 1 - p[i][j] ) + f[i][j-1][k-1] * p[i][j];
}
}
}
double temp1, temp2;
temp1 = temp2 = 1;
for( int i = 1; i <= T; i++ ){
g[i][1] = f[i][M][1];
for( int j = 2; j <= M; j++ ){
g[i][j] = g[i][j-1] + f[i][M][j];
}
temp1 *= g[i][M];
temp2 *= g[i][N-1];
}
printf( "%.3lf\n", temp1 - temp2 );
}
return 0;
}