题面

传送门

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;
}

最新文章

  1. C语言程序设计第12次作业
  2. KeyBord事件从Activtiy层往下分发详细过程代码示例
  3. 彻底解决Android SDK Manager更新慢的问题
  4. SSAS更改默认端口号,使用非默认端口号的时候Olap连接字符串的格式
  5. 安装office2013时弹出microsoft setup bootstrapper已停止工作,接着就不能安装了
  6. 初识io流条件状态
  7. cocos2d-x获得系统的语言
  8. [LeetCode][Python]ZigZag Conversion
  9. android中使用jni对字符串加解密实现分析
  10. java对象与Json字符串之间的转化(fastjson)
  11. linux下(fdisk,gdisk,parted)三种分区工具比较
  12. 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权
  13. js限制字符串长度,超出的部分补...
  14. H - 栀子花开
  15. JavaScript Array some() 方法
  16. 【Scrum】-NO.40.EBook.1.Scrum.1.001-【敏捷软件开发:原则、模式与实践】- Scrum
  17. jq里面关于disable的用法
  18. $(&quot;节点名&quot;).html(&quot;字符串&quot;)和$(&quot;节点名&quot;).text(&quot;字符串&quot;)区别
  19. Mybatis的executor
  20. Eclipse配置PyDev插件(配置Python环境) 及javascript相关配置

热门文章

  1. JavaScript中setInterval的用法总结
  2. The score of &#39;O&#39; and &#39;X&#39;
  3. 1. java 的访问修饰符
  4. node.js调试方法
  5. 利用Python实现倒序任意整数
  6. cordova build android 环境的坑
  7. idea validation code
  8. 用PL/sql连接oracle 弹窗出现 could not resolve the connect identifier specified 这个错误
  9. github创建本地库后关联远程库
  10. 快速修改数据库日志的增长修改为50M[转]