【HDU】4336 Card Collector
http://acm.hdu.edu.cn/showproblem.php?pid=4336
题意:n张卡片,每一次取一个盒子,盒子里装有卡片i的概率是p[i],求得到所有卡片所需要开的盒子的期望数(n<=20)
#include <cstdio>
#include <cstring>
using namespace std; const int N=22;
int n;
double p[N], f[1<<N];
int main() {
while(~scanf("%d", &n)) {
int all=(1<<n)-1;
for(int i=0; i<n; ++i) scanf("%lf", &p[i]);
f[all]=0;
for(int s=all-1; s>=0; --s) {
double up=1, down=0;
for(int i=0; i<n; ++i) {
if(s&(1<<i)) continue;
up+=f[s|(1<<i)]*p[i];
down+=p[i];
}
f[s]=up/down;
}
printf("%f\n", f[0]);
}
return 0;
}
设$f[s]$表示当前得到状态为$s$的卡片还需要开的盒子的期望数:
考虑开一个箱子:
1、没有卡片,概率为:$1-\sum_{i} p[i]$;期望和为:$(1-\sum_{i} p[i])f[s]$
2、卡片$i$已经收集过了,概率为:$p[i]$;期望和为:$\sum_{i \in s} p[i]f[s]$
3、卡片$i$没有收集过,概率为:$p[i]$;期望和为:$\sum_{i \notin s} p[i]f[s \cup \{ i \}]$
所以
$$
\begin{align}
f[s]
& = (1-\sum_{i} p[i])f[s] + \sum_{i \in s} p[i]f[s] + \sum_{i \notin s} p[i]f[s \cup \{ i \}] \\
& = \frac{1 + \sum_{i \notin s} p[i]f[s \cup \{ i \}]}{\sum_{i \notin s} p[i]}
\end{align}
$$
然后还有注意,spj的话精度一定要注意啊,不要只输出了几位= =,最好多输出几位,你懂的...于是就wa了几发..
【HDU】4336 Card Collector的更多相关文章
- 【HDOJ】4336 Card Collector
概率DP的题目,一直就不会做这类题目.dp[s]表示状态为s的时候再买多少张牌可以买全,表示的是一个期望值.dp[s] = 1 + P(empty) * dp[s] + P(had) * dp[s] ...
- 【题解】HDU4336 Card Collector
显然,这题有一种很简单的做法即直接状压卡牌的状态并转移期望的次数.但我们现在有一个更加强大的工具——min-max容斥. min-max 容斥(对期望也成立):\(E[max(S)] = \sum_{ ...
- HDU 4336 Card Collector 期望dp+状压
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4336 Card Collector Time Limit: 2000/1000 MS (Java/O ...
- 【HDU】4888 Redraw Beautiful Drawings 网络流【推断解是否唯一】
传送门:pid=4888">[HDU]4888 Redraw Beautiful Drawings 题目分析: 比赛的时候看出是个网络流,可是没有敲出来.各种反面样例推倒自己(究其原因 ...
- 【BZOJ3526】[Poi2014]Card 线段树
[BZOJ3526][Poi2014]Card Description 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的 ...
- HDU 4336——Card Collector——————【概率dp】
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4336 Card Collector(动态规划-概率DP)
Card Collector Problem Description In your childhood, do you crazy for collecting the beautiful card ...
- hdu 4336 Card Collector (概率dp+位运算 求期望)
题目链接 Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 【概率dp】D. Card Collector
https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/D [题意] 为了集齐n张卡片,必须要买多少袋零食?题目给定每种卡片出现在零食中的 ...
随机推荐
- HDU5489 Removed Interval(动态规划)
一个长度为n的序列,删除任意长度为l的连续子序列后,求剩下的序列的最长公共子序列. 先求出以第i个元素为开始的LIS的长度,再一次循环,对所要求的结果更新 #include<iostream&g ...
- LSM-Tree (BigTable 的理论模型)(转)
Google的BigTable架构在分布式结构化存储方面大名鼎鼎,其中的MergeDump模型在读写之间找到了一个较好的平衡点,很好的解决了web scale数据的读写问题. MergeDump的理论 ...
- ubuntu wubi非在线快速安装
最近ubuntu更新了,就想把它重新装回来试一下,但是由于种种原因划分磁盘不太方便,很自然就想到了wubi,这个不仅仅安全性高,而且比直接装系统快多了,而且方便.但是在线安装实在是太慢了,所以就找到了 ...
- 什么是好的API设计?(转)
什么是API? 我们只要是在进行编程我们就需要不停的设计API. API简单来讲可以是一个调用的函数,一个接口. 抽象来说,接口是一个内聚系统暴漏给外部的一切信息,包含但不限于: 调用方式:比如通过l ...
- 【转】使用jquery animate创建平滑滚动效果
这篇文章主要介绍了使用jquery animate创建平滑滚动效果,效果可以滚动到顶部.到底部或页面中指定地方,生要的是非常平滑,很舒服,需要的朋友可以参考下 滚动到顶部: $('.scroll_to ...
- PhpMyAdmin管理,登录多台远程MySQL服务器
法一: 可直接在config.inc.php里添加数据库连接信息即可 先$i++, 然后复制原来的配置信息后修改 不过这种方式需要将连接信息写在配置文件中,有点麻烦. 这种后面省事,不用填信息,选择一 ...
- PHP入门 - - 07-->HTML的表单
一.<form>标签及其属性 <from></form>标签对用来创建一个表单,即定义表单的开始和结束位置,<form>标签具有下面等属性. ...
- Uva 725 Division
0.不要傻傻的用递归去构造出一个五位数来,直接for循环最小到最大就好,可以稍微剪枝一丢丢,因为最小的数是01234 从1234开始,因为倍数n最小为2 而分子是一个最多五位数,所以分母应该小于五万. ...
- 【虚拟机】苹果虚拟机mac10.11.6+Xcode8.1
[虚拟机]苹果虚拟机mac10.11.6+Xcode8.1本虚拟机加装Xcode8.1,方便大家更好学习Swift3.0语言以及iOS开发.安装注意事项:第一步:确认硬件:1.确认主板以及cpu支持虚 ...
- hdu 1059 Dividing
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...