#min_max容斥#Hdu 4336 Card Collector
作者:互联网
题目
有\(n\)张牌,获得第\(i\)张牌的概率为\(p_i\),
问期望多少次能收集完\(n\)张牌
分析
题目求的是\(E(\max S)\),根据min_max容斥可以得到,
\[E(\max S)=\sum_{T\subseteq S}(-1)^{|T|-1}E(\min T) \]然而
\[E(\min S)=\frac{1}{\sum_{j\in S}p_j} \]所以搜索一下就可以了
代码
#include <cstdio>
#define rr register
using namespace std;
int n; double p[21],ans;
inline void dfs(int dep,double sum,int opt){
if (dep>n) {if (sum>1e-6) ans-=opt/sum; return;}
dfs(dep+1,sum,opt);
dfs(dep+1,sum+p[dep],-opt);
}
signed main(){
while (scanf("%d",&n)==1){
for (rr int i=1;i<=n;++i) scanf("%lf",&p[i]);
ans=0,dfs(1,0,1),printf("%lf\n",ans);
}
return 0;
}
标签:opt,Hdu,min,4336,max,sum,dep,int 来源: https://www.cnblogs.com/Spare-No-Effort/p/14081749.html