hdu4336 期望买多少包面可以集齐卡片(入门)
套一个状态压缩就是和3853一样的期望了:http://www.cnblogs.com/xiao-xin/articles/4307653.html
仔细分析一下后继点在已买和未买可以很容易写出方程
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 double dp[1050005]; 6 int main() 7 { 8 int i,j,size,next,n; 9 double zp,p[21]; 10 while (~scanf("%d",&n)) 11 { 12 for (i=0;i<n;i++) scanf("%lf",&p[i]); 13 size=(1<<n)-1; 14 memset(dp,0,sizeof(dp)); 15 for (i=size-1;i>=0;i--) 16 { 17 zp=0.0; 18 for (j=0;j<n;j++) 19 if ((i&(1<<j))==0) 20 { 21 zp+=p[j]; 22 next=(i|(1<<j)); 23 dp[i]+=p[j]*dp[next]; 24 } 25 dp[i]=(dp[i]+1)/zp; 26 } 27 printf("%.5lf\n",dp[0]); 28 } 29 return 0; 30 }