• min-max容斥


    min-max容斥
    min-max容斥是指给定集合(S),设(max(S))表示(S)中的最大值,(min(S))表示集合中的最小值,则有

    [max(S)=sum_{Tsubseteq S}(-1)^{|T|-1}min(T) ]

    相关题目
    hdu4336 Card Collector
    (n)件物品,每一秒有可能获得其中的一件物品(i),概率为(p_i),求获得所有物品的期望时间。

    (max(S))表示第一次获得(S)中最后一种卡片的期望时间,(min(S))表示第一次获得(S)中第一种卡片的期望时间
    其中(min(S)=frac{1}{sum_{iin T}P_i})
    时间复杂度(O(2^n))

    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<stack>
    #include<queue>
    #include<set>
    #include<map>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<ctime>
    #include<algorithm>
    #define LL long long
    #define PII pair<int,int>
    #define PLL pair<LL,LL>
    #define pi acos(-1.0)
    #define eps 1e-6
    #define lowbit(x) x&(-x)
    using namespace std;
    
    const int maxn=25;
    int n;
    double p[maxn],ans;
    
    void dfs(int id,int k,double sum){
        if(id==n){
            if(sum<eps) return;
            if(k&1) ans+=1/sum;
            else ans-=1/sum;
            return;
        }
        dfs(id+1,k+1,sum+p[id]);
        dfs(id+1,k,sum);
    }
    
    int main(){
        while(scanf("%d",&n)!=EOF){
            for(int i=0;i<n;i++) scanf("%lf",&p[i]);
            ans=0.0;
            dfs(0,0,0.0);
            printf("%.4f
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    layer备忘
    Java中遍历Map对象的4种方法
    为什么Java中1000==1000为false而100==100为true?
    linux系统安装psycopg2
    centos7源码安装mysql5.7
    Azure Sql
    javascript和jQuery动态修改css样式的方法
    Git early EOF index-pack failed 问题
    C# 多线程——SemaphoreSlim的使用
    Docker 可视化
  • 原文地址:https://www.cnblogs.com/fxq1304/p/13394768.html
Copyright © 2020-2023  润新知