hdu 4336 Card Collector

时间:2023-03-08 22:19:36
hdu 4336 Card Collector

dp+状态压缩

 #include<cstdio>
using namespace std;
double p[];
double dp[<<];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=; i<n; i++)
scanf("%lf",&p[i]);
dp[(<<n)-]=;
for(int i=(<<n)-; i>=; i--)
{
dp[i]=1.0;
double sum=0.0;
for(int j=; j<n; j++)
{
if(i&(<<j)) continue;
sum+=p[j];
dp[i]+=dp[i|(<<j)]*p[j];
}
//printf("%lf %lf==\n",dp[i],sum);
dp[i]=dp[i]/sum;
}
printf("%lf\n",dp[]);
}
return ;
}