• 【题解】HDU4336 Card Collector


      显然,这题有一种很简单的做法即直接状压卡牌的状态并转移期望的次数。但我们现在有一个更加强大的工具——min-max容斥。

        min-max 容斥(对期望也成立):(E[max(S)] = sum_{Tsubseteq S}^{ }(-1)^{|T| - 1}E[min(T)])

      我们可以让 (E[max(S)]) 表示 (S) 中所有元素均出现的期望时间(即最后一个元素出现的期望时间),(E[min(S)]) 表示 (S) 中任意一个元素出现的期望时间(即第一个元素出现的期望时间)。

      那么,我们可以直接 (2^{n}) 枚举 (T) ,然后 (E[min(T)] = frac{1}{P}) 。

      Why? 原本用期望的定义式计算为:(sum_{i=1 }^{+infty} P*(1 - P)^{i - 1}*i),用等比数列求和即可求得。

    #include <cstdio>
    using namespace std;
    #define db double
    #define maxn 100
    int n, cnt;
    db ans, P, a[maxn];
    
    void dfs(int now)
    {
        if(now == n + 1) 
        { 
            if(!cnt) return;
            db T = (db) 1 / P;
            ans += (cnt & 1) ? T : -T; 
            return; 
        } 
        P += a[now]; cnt ++; dfs(now + 1);
        P -= a[now]; cnt --; dfs(now + 1);
    }
    
    int main()
    {
        while(~scanf("%d", &n))
        {
            ans = 0;
            for(int i = 1; i <= n; i ++)
                scanf("%lf", &a[i]);
            dfs(1); printf("%.6lf
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    aidl 详解
    为什么我选择用 flutter
    hunting
    Dynamic programming
    android 微信开发交流群
    hash function 字符串哈希函数
    函数也可以看成是空间的变换
    语法树
    生活中的物理随处可见
    about coroutine
  • 原文地址:https://www.cnblogs.com/twilight-sx/p/10159521.html
Copyright © 2020-2023  润新知