zoukankan      html  css  js  c++  java
  • 【HDOJ】【4336】Card Collector

    概率DP/数学期望/状压DP/容斥原理

      kuangbin总结中的第14题

      好神奇的做法……题解看kuangbin的代码好了……

     1 //HDOJ 4336
     2 #include<cstdio>
     3 #define rep(i,n) for(int i=0;i<n;++i)
     4 #define F(i,j,n) for(int i=j;i<=n;++i)
     5 #define D(i,j,n) for(int i=j;i>=n;--i)
     6 const int N=22;
     7 
     8 double p[N],f[1<<N];
     9 int main(){
    10     int n;
    11     while(scanf("%d",&n)!=EOF){
    12         double tt=0.0;
    13         rep(i,n){
    14             scanf("%lf",&p[i]);
    15             tt+=p[i];
    16         }
    17         tt=1-tt;
    18         f[(1<<n)-1]=0;
    19         D(i,(1<<n)-2,0){
    20             double x=0,sum=1.0;
    21             rep(j,n)
    22                 if(i & (1<<j))x+=p[j];
    23                 else sum+=p[j]*f[i|(1<<j)];
    24             f[i]=sum/(1-tt-x);
    25         }
    26         printf("%.5lf
    ",f[0]);
    27     }
    28     return 0;
    29 }
    View Code(概率DP)
     1 //HDOJ 4336
     2 #include<cstdio>
     3 #define rep(i,n) for(int i=0;i<n;++i)
     4 #define F(i,j,n) for(int i=j;i<=n;++i)
     5 
     6 double p[22];
     7 int main(){
     8     int n;
     9     while(scanf("%d",&n)!=EOF){
    10         rep(i,n) scanf("%lf",&p[i]);
    11         double ans=0;
    12         for(int i=1;i<(1<<n);++i){
    13             int cnt=0; double sum=0;
    14             rep(j,n) if(i&(1<<j)){
    15                 sum+=p[j];
    16                 cnt++;
    17             }
    18             if (cnt&1) ans+=1.0/sum;
    19             else ans-=1.0/sum;
    20         }
    21         printf("%.5lf
    ",ans);
    22     }
    23     return 0;
    24 }
    View Code(容斥原理)
  • 相关阅读:
    groovy 执行shell
    expect 用法
    shebang解释
    docker 安装
    centos7 lvm添加硬盘后扩展磁盘空间
    scoped的原理和deep深度选择器的妙用
    swagger3
    帮评网
    反射工具
    网络只能传输二进制
  • 原文地址:https://www.cnblogs.com/Tunix/p/4302895.html
Copyright © 2011-2022 走看看