题目链接:http://poj.org/problem?id=2151
题目大意:求出每个队伍至少做出一题且做得最多的队伍做出至少N个题的概率。
题目思路:所有队伍都做出至少一题的概率-所有队伍只做出1到n-1个题的概率。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
#include<list>
#include<iostream>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f
#define Max 110
int max(int a,int b)
{
return a>b?a:b;
}
int min(int a,int b)
{
return a<b?a:b;
}
double dp[33][33],sum[1010][33],p;
int m,t,n;
int main()
{
int i,j,k;
while(scanf("%d%d%d",&m,&t,&n),m|t|n)
{
for(i=1;i<=t;i++)
{
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(j=1;j<=m;j++)
{
scanf("%lf",&p);
for(k=0;k<=j;k++)
{
if(k==0)
{
dp[j][k]=dp[j-1][k]*(1-p);
}
else
{
dp[j][k]=dp[j-1][k]*(1-p)+dp[j-1][k-1]*p;
}
}
}
sum[i][0]=dp[m][0];
for(j=1;j<=m;j++)
sum[i][j]=sum[i][j-1]+dp[m][j];
}
double tmp1=1,tmp2=1;
for(i=1;i<=t;i++)
{
tmp1*=sum[i][m]-sum[i][0];
tmp2*=sum[i][n-1]-sum[i][0];
}
printf("%.3lf\n",tmp1-tmp2);
}
}