#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
const int MAXN=22;
double p[MAXN];
double dp[1<<MAXN];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
double tt=0;
for(int i=0;i<n;i++)
{
scanf("%lf",&p[i]);
tt+=p[i];
}
tt=1-tt;//tt就表示没有卡片的概率了
dp[(1<<n)-1]=0;
for(int i=(1<<n)-2;i>=0;i--)
{
double x=0,sum=1;
for(int j=0;j<n;j++)
{
if((i&(1<<j)))x+=p[j];
else sum+=p[j]*dp[i|(1<<j)];
}
dp[i]=sum/(1-tt-x);
}
printf("%.5lf\n",dp[0]);
}
return 0;
}
tjut 4336
最新推荐文章于 2016-08-31 17:14:15 发布