11181 - Probability|Given
条件概率。
数据量太小了, 暴力吧!
View Code
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cmath> 6 #include<algorithm> 7 #include<queue> 8 #include<stack> 9 #include<map> 10 #include<set> 11 #include<string> 12 #include<vector> 13 #include<iterator> 14 #include<cctype> 15 #include<iomanip> 16 using namespace std; 17 18 #define MAX 1000 19 int bit[100]; 20 double p[100]; 21 double a[100], b; 22 int main(){ 23 int n, r; 24 int k = 0; 25 while(scanf("%d%d", &n, &r) == 2){ 26 if(n == 0 && r == 0) break; 27 for(int i = 0; i < n; ++i) 28 scanf("%lf",&p[i]); 29 memset(bit,0,sizeof(bit)); 30 for(int i = n - 1,j = 0;j < r && i >= 0; --i, ++j) 31 bit[i] = 1; 32 for(int i = 0; i < n; ++i) a[i] = 0.0; 33 b = 0.0; 34 do{ 35 double tmp = 1.0; 36 for(int i = 0; i < n; ++i){ 37 if(bit[i]){ 38 tmp *= p[i]; 39 } 40 else tmp *= 1.0 - p[i]; 41 } 42 b += tmp; 43 for(int i = 0; i < n; ++i){ 44 if(bit[i]) a[i] += tmp; 45 } 46 }while(next_permutation(bit,bit + n)); 47 printf("Case %d:\n", ++k); 48 for(int i = 0; i < n; ++i){ 49 printf("%.6lf\n", a[i] / b); 50 } 51 } 52 return 0; 53 }


浙公网安备 33010602011771号