首页 > 其他 > 详细

hdu 4336 Card Collector

时间:2014-07-31 23:15:50      阅读:401      评论:0      收藏:0      [点我收藏+]

有n种卡片,概率分别为p1...pn,p1+...+pn<=1

每个袋子最多一张卡片,也可以没有

这题巧妙的用到了整数的二进制

 1 #include<iostream>
 2 #include<string>
 3 #include<cstdio>
 4 #include<vector>
 5 #include<queue>
 6 #include<stack>
 7 #include<algorithm>
 8 #include<cstring>
 9 #include<stdlib.h>
10 using namespace std;
11 #define pb push_back
12 double dp[1<<21],p[22];
13 int main(){
14     int n;
15     while(cin>>n){
16         for(int i=0;i<n;i++)
17             scanf("%lf",&p[i]);
18         dp[(1<<n)-1]=0;
19         for(int i=(1<<n)-2;i>=0;i--){
20             double tmp=0;
21             dp[i]=1;
22             for(int j=0;j<n;j++){
23                 if(i&(1<<j)) continue; //i转化成二进制后,从右边开始数第j位是否为1
24                 dp[i]+=dp[i|(1<<j)]*p[j];
25                 tmp+=p[j];
26             }
27 
28             dp[i]/=tmp;
29         }
30         printf("%.6lf\n",dp[0]);
31     }
32 }

 

hdu 4336 Card Collector,布布扣,bubuko.com

hdu 4336 Card Collector

原文:http://www.cnblogs.com/ainixu1314/p/3883560.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!