链接:点击打开链接
题意:每包零食里有一张卡牌,总共有种不同的卡牌。得到这
种卡牌的概率分别为
,求收集到所有卡牌的期望是多少。
代码:
#include<bits/stdc++.h>
using namespace std;
double a[20],dp[1<<20];
int main(){
double s1,s2;
int i,j,n,sta;
while(scanf("%d",&n)!=EOF){
sta=(1<<n)-1;
for(i=0;i<n;i++)
scanf("%lf",&a[i]);
memset(dp,0,sizeof(dp));
for(i=sta-1;i>=0;i--){ //dp[i]=s1+(1-s2)*(dp[i]+1)
s1=s2=0;
for(j=0;j<n;j++){
if(((1<<j)&i)==0){
s1+=((dp[i|(1<<j)]+1)*a[j]);
s2+=a[j];
}
}
dp[i]=(s1+1-s2)/s2;
}
printf("%.4lf\n",dp[0]);
}
return 0;
}