zoukankan      html  css  js  c++  java
  • hdu 4366 Card Collector (容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=4336

    题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi   

    每包至多有 一张卡片 ,也有可能没有 卡片 。

    求  需要买多少包 才能集齐 n 张卡片  ,求包数的 期望 。

    题解 : 容斥原理 。

    每个bag中什么卡的机会都有,说明每个概率都会有交集,这样就会想到一个图,就是右下面那个

    然后就这个公式了,还是很好理解的

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<set>
     7 #include<map>
     8 #include<queue>
     9 #include<vector>
    10 #include<string>
    11 #define inf 0x7fffffff
    12 #define maxn 60000
    13 #define CL(a,b) memset(a,b,sizeof(a))
    14 #define  ll  long long
    15 using namespace std;
    16 int n ;
    17 double a[30] ;
    18  int main()
    19  {
    20       int i  ;
    21     while(scanf("%d",&n)!=EOF)
    22     {
    23         for(i = 0 ;i < n;i++)
    24         {
    25             scanf("%lf",&a[i]) ;
    26         }
    27         double sum = 0  ;
    28        for(int msk = 1 ; msk < (1 << n);msk++)
    29        {
    30            double mul = 0 ;
    31            int bits = 0 ;
    32 
    33            for(i = 0 ; i < n;i++)
    34            {
    35                  if(msk & (1 << i ))
    36                 {
    37                     bits ++ ;
    38                     mul += a[i] ;
    39 
    40                 }
    41            }
    42 
    43 
    44                 if(bits & 1)
    45                 {
    46                     sum += 1.0/mul ;
    47                 }
    48                 else sum -= 1.0/mul ;
    49 
    50        }
    51 
    52        printf("%lf\n",sum) ;
    53 
    54     }
    55 
    56  }
     

  • 相关阅读:
    精算师的前世今生
    失落的C语言结构体封装艺术
    关于联合的一些介绍
    变量的声明和定义
    C/C++内存分配区
    探寻周瑜“前世今生”
    SpringBoot中使用AOP
    springBoot中的事物管理
    springBoot整合多数据源
    spingBoot整合mybatis+generator+pageHelper
  • 原文地址:https://www.cnblogs.com/acSzz/p/2776136.html
Copyright © 2011-2022 走看看