题面

传送门

Sol

方法一

直接状压就好了

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll; int n;
double p[21], f[1 << 20]; int main(RG int argc, RG char *argv[]){
while(scanf("%d", &n) != EOF){
for(RG int i = 1; i <= n; ++i) scanf("%lf", &p[i]);
RG int S = 1 << n; Fill(f, 0);
for(RG int i = S - 2; ~i; --i){
RG double s = 1.0;
for(RG int j = 1; j <= n; ++j) if(~i & (1 << (j - 1))) s -= p[j];
s = 1.0 - s, f[i] = 1.0 / s;
for(RG int j = 1; j <= n; ++j)
if(~i & (1 << (j - 1))) f[i] += p[j] * f[i | (1 << (j - 1))] / s;
}
printf("%.6lf\n", f[0]);
}
return 0;
}

方法二

方法一实在太水了,显然不是重点

下面介绍一种容斥方法

min-max容斥

\(E[max(S)]=\sum(-1)^{k+1}E[min(S')]\)

其中集合\(S'\subseteq S\),\(k=|S'|\)

\(max(S)\)指的是这个集合内最后出现的元素

\(min(S)\)指的是这个集合内最先出现的元素

\(E\)表示期望第几步出现

具体到这个题

就是要求\(E[max(\)全集\()]\)

\(E[min(S')]\)就是指\(S'\)任意出现一个的期望步数

举例:

每步出现\(x_i\)的概率\(p_i\)

\(min\{x_1, x_2, x_3 \}\)的概率就是\(p_1+p_2+p_3\)

期望步数就是\(\frac{1}{p_1+p_2+p_3}\)

然后就容斥一下这个题

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll; int n;
double p[21], ans; IL void Dfs(RG int x, RG double E, RG int op){
if(x > n){
if(E > 1e-7) ans += 1.0 * op / E;
return;
}
Dfs(x + 1, E, op);
Dfs(x + 1, E + p[x], -op);
} int main(RG int argc, RG char *argv[]){
while(scanf("%d", &n) != EOF){
for(RG int i = 1; i <= n; ++i) scanf("%lf", &p[i]);
ans = 0, Dfs(1, 0, -1);
printf("%.6lf\n", ans);
}
return 0;
}

HDU4336:Card Collector(min-max容斥)的更多相关文章

  1. 【HDU4336】Card Collector(Min-Max容斥)

    [HDU4336]Card Collector(Min-Max容斥) 题面 Vjudge 题解 原来似乎写过一种状压的做法,然后空间复杂度很不优秀. 今天来补一种神奇的方法. 给定集合\(S\),设\ ...

  2. Card Collector(期望+min-max容斥)

    Card Collector(期望+min-max容斥) Card Collector woc居然在毫不知情的情况下写出一个min-max容斥 题意 买一包方便面有几率附赠一张卡,有\(n\)种卡,每 ...

  3. HDU - 4336:Card Collector(min-max容斥求期望)

    In your childhood, do you crazy for collecting the beautiful cards in the snacks? They said that, fo ...

  4. [HDU4336]Card Collector(min-max容斥,最值反演)

    Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  5. HDU4336 Card Collector(期望 状压 MinMax容斥)

    题意 题目链接 \(N\)个物品,每次得到第\(i\)个物品的概率为\(p_i\),而且有可能什么也得不到,问期望多少次能收集到全部\(N\)个物品 Sol 最直观的做法是直接状压,设\(f[sta] ...

  6. hdu4336 Card Collector MinMax 容斥

    题目传送门 https://vjudge.net/problem/HDU-4336 http://acm.hdu.edu.cn/showproblem.php?pid=4336 题解 minmax 容 ...

  7. hdu4336 Card Collector 【最值反演】

    题目链接 hdu4336 题解 最值反演 也叫做\(min-max\)容斥,在计算期望时有奇效 \[max\{S\} = \sum\limits_{T \in S} (-1)^{|T| + 1}min ...

  8. 【题解】HDU4336 Card Collector

    显然,这题有一种很简单的做法即直接状压卡牌的状态并转移期望的次数.但我们现在有一个更加强大的工具——min-max容斥. min-max 容斥(对期望也成立):\(E[max(S)] = \sum_{ ...

  9. hdu4336 Card Collector

    Problem Description In your childhood, do you crazy for collecting the beautiful cards in the snacks ...

  10. hdu4336 Card Collector 状态压缩dp

    Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

随机推荐

  1. scrapy连接MongoDB

    Scrapy中连接MongoDB所需要做的工作如下: 1.settings中需要设置的部分: # 启动管道组件 ITEM_PIPELINES = { 'QianChengWuYu.mongoDBPip ...

  2. 闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别

    闭包(Closure)和匿名函数(Anonymous function)/lambda表达式的区别 函数最常见的形式是具名函数(named function): function foo(){ con ...

  3. js控制输入框只能输入数字不能输入其他字符

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 0、PlayGround可视化

    Tensorflow新手通过PlayGround可视化初识神经网络 是不是觉得神经网络不够形象,概念不够清晰,如果你是新手,来玩玩PlayGround就知道,大神请绕道. PlayGround是一个在 ...

  5. 转-阿里云Kubernetes容器Istio实践之集成日志

    http://cloud.it168.com/a2018/0801/3216/000003216642.shtml#articlecomment https://mbd.baidu.com/newsp ...

  6. (转)搭建企业内部yum仓库(centos6+centos7+epel源)

    搭建企业内部yum仓库(centos6+centos7+epel源) 原文:https://www.cnblogs.com/nulige/p/6081192.html https://www.linu ...

  7. Rational Rose2007下载和安装

    网上关于Rational Rose2007安装包,网上找了一堆大多都是垃圾,最后找到一个可用的(带激活文件),保存在自己的网盘里,这里分享出来:https://pan.baidu.com/s/1bpb ...

  8. 基础selenium+Python(定位、等待、打印)

    1.第一个脚本 # coding = utf-8 from selenium import webdriver browser = webdriver.Firefox() browser.get(&q ...

  9. SVN命令行怎么用?--转百度知道

    http://zhidao.baidu.com/link?url=uPWXURahp5KzdXbgrGTb9-r-abGaNC-J7dkhFkMhf062OJ1jeCM5wpBCgDR7bDg8uFr ...

  10. iOS 富文本属性

    // NSFontAttributeName 设置字体属性,默认值:字体:Helvetica(Neue) 字号:12 // NSForegroundColorAttributeNam 设置字体颜色,取 ...