HDU 4336 Card Collector:状压 + 期望dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336
题意:
有n种卡片(n <= 20)。
对于每一包方便面,里面有卡片i的概率为p[i],可以没有卡片。
问你集齐n种卡片所买方便面数量的期望。
题解:
状态压缩。
第i位表示手上有没有卡片i。
表示状态:
dp[state] = expectation
(卡片状态为state时,要集齐卡片还要买的方便面数的期望)
找出答案:
ans = dp[0]
刚开始一张卡片都没有。
如何转移:
now: dp[state]
对于卡片i,如果手上已经有了i,则方便面里有i等价于面里什么都没有。
所以子期望共两种:
(1)拿到一张还没有的卡片i。
(2)拿到垃圾2333。
dp[state] = sigma( dp[state|(1<<i)] * p[i] ) + dp[state] * P(useless) + 1
P(useless)为拿到垃圾的概率。
设tot = sigma(p[i])
P(useless) = 1 - tot
原式移项后:
dp[state] = ( sigma( dp[state|(1<<i)] * p[i] ) + 1 ) / tot
边界条件:
dp[(1<<n)-1] = 0
已经集齐,不用再买。
AC Code:
- // state expression:
- // dp[state] = expectation
- // state: state of present cards
- //
- // find the answer:
- // ans = dp[0]
- //
- // transferring:
- // now: dp[state]
- // dp[state] = sigma( dp[state|(1<<i)] * p[i] ) + dp[state] * P(useless) + 1
- // i: not been collected
- // dp[state] = ( sigma( dp[state|(1<<i)] * p[i] ) + 1 ) / (1 - P(useless))
- // dp[state] = ( sigma( dp[state|(1<<i)] * p[i] ) + 1 ) / tot
- //
- // boundary:
- // dp[(1<<n)-1] = 0
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- #define MAX_N 25
- #define MAX_S ((1<<20)+5)
- using namespace std;
- int n;
- double p[MAX_N];
- double dp[MAX_S];
- void read()
- {
- for(int i=;i<n;i++)
- {
- cin>>p[i];
- }
- }
- void solve()
- {
- memset(dp,,sizeof(dp));
- for(int state=(<<n)-;state>=;state--)
- {
- double tot=;
- for(int i=;i<n;i++)
- {
- if(!((state>>i)&))
- {
- dp[state]+=dp[state|(<<i)]*p[i];
- tot+=p[i];
- }
- }
- dp[state]=(dp[state]+1.0)/tot;
- }
- }
- void print()
- {
- printf("%.9f\n",dp[]);
- }
- int main()
- {
- while(cin>>n)
- {
- read();
- solve();
- print();
- }
- }
HDU 4336 Card Collector:状压 + 期望dp的更多相关文章
- hdu 4336 Card Collector(状压dp/Min-Max反演)
传送门 解题思路 第一种方法是状压\(dp\),设\(f(S)\)为状态\(S\)到取完的期望步数,那么\(f(S)\)可以被自己转移到,还可以被\(f(S|(1<<i))\)转移到,\( ...
- 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)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题目大意:有n种卡片,需要吃零食收集,打开零食,出现第i种卡片的概率是p[i],也有可能不出现卡 ...
- HDU 4336 Card Collector 期望dp+状压
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4336 Card Collector Time Limit: 2000/1000 MS (Java/O ...
- CF16E Fish(状压+期望dp)
[传送门[(https://www.luogu.org/problemnew/show/CF16E) 解题思路 比较简单的状压+期望.设\(f[S]\)表示\(S\)这个状态的期望,转移时挑两条活着的 ...
- HDU 4336 Card Collector(状压 + 概率DP 期望)题解
题意:每包干脆面可能开出卡或者什么都没有,一共n种卡,每种卡每包爆率pi,问收齐n种卡的期望 思路:期望求解公式为:$E(x) = \sum_{i=1}^{k}pi * xi + (1 - \sum_ ...
- hdu 4336 Card Collector (概率dp+位运算 求期望)
题目链接 Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)
题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...
- $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥
正解:期望 解题报告: 传送门! 先放下题意,,,已知有总共有$n$张卡片,每次有$p_i$的概率抽到第$i$张卡,求买所有卡的期望次数 $umm$看到期望自然而然想$dp$? 再一看,哇,$n\le ...
- HDU 4336——Card Collector——————【概率dp】
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
随机推荐
- JAVA Eclipse的Android文件结构是怎么样的
默认res目录下面存放了界面需要的布局和图片文件,之所以图片分为hdpi,ldpi,mdpi这些,是为了不同的设备准备的(高/中/低分辨率的图片) Bin目录类似于VS的debug或者releas ...
- 我的IT之路
在写这篇文章的时候内心是无比激动,因为这辈子是注定和IT打交道了. 都说大学时光是美好的,但却只有到了大四才知道时间是短暂的,也许和许多人一样,我的大学主要时光是在游戏中度过,1000多把的寒冰算是同 ...
- 1. WPF学习之概述
<深入浅出WPF> 前言: C#专业的朋友推荐的WPF入门书籍<深入浅出WPF>,没学过的朋友从今天开始和我一起开启WPF学习之旅吧! 什么是WPF? WPF 是windows ...
- 添加w3c验证图片到网站
1.在http://validator.w3.org/网站验证 2.添加验证通过后的代码至自己的网站 类似<p> <a href="http://validator. ...
- 浅谈 Fork/Join
fork/join的java7新添加的功能,能够把它理解成一个并发框架. 我们通过fork/join能将一个可分解的大任务.分解成多个子任务同步运行.运行完成后,在将各子任务的结果进行合并,得到终于的 ...
- Spring IOC源代码具体解释之容器依赖注入
Spring IOC源代码具体解释之容器依赖注入 上一篇博客中介绍了IOC容器的初始化.通过源代码分析大致了解了IOC容器初始化的一些知识.先简单回想下上篇的内容 加载bean定义文件的过程.这个过程 ...
- java log4j 日志文件
开发中经常会用到log日志文件,根据业务需要可能不产生很大日志文件给维护和[排错带来了麻烦.所以我们希望能够每天或每个月产生一个日志文件,这样文件不至于过大. 或者根据日志文件大小来判断,超过规定大小 ...
- UITextView的一些技巧
1.在指定位置插入字符串: NSMutableString *TextViewStr=[[NSMutableString alloc] initWithString:TextView.text ...
- 在ios中使用单例模式编程
本文转载至 http://blog.csdn.net/remote_roamer/article/details/7107007 1. @implementation Singleton ...
- 【BZOJ3291】Alice与能源计划 二分图最大匹配
[BZOJ3291]Alice与能源计划 Description 在梦境中,Alice来到了火星.不知为何,转眼间Alice被任命为火星能源部长,并立刻面临着一个严峻的考验. 为了方便,我们可以将火星 ...