题目链接: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的更多相关文章

  1. hdu 4336 Card Collector(状压dp/Min-Max反演)

    传送门 解题思路 第一种方法是状压\(dp\),设\(f(S)\)为状态\(S\)到取完的期望步数,那么\(f(S)\)可以被自己转移到,还可以被\(f(S|(1<<i))\)转移到,\( ...

  2. HDU 4336 Card Collector(动态规划-概率DP)

    Card Collector Problem Description In your childhood, do you crazy for collecting the beautiful card ...

  3. [HDU 4336] Card Collector (状态压缩概率dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题目大意:有n种卡片,需要吃零食收集,打开零食,出现第i种卡片的概率是p[i],也有可能不出现卡 ...

  4. HDU 4336 Card Collector 期望dp+状压

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4336 Card Collector Time Limit: 2000/1000 MS (Java/O ...

  5. CF16E Fish(状压+期望dp)

    [传送门[(https://www.luogu.org/problemnew/show/CF16E) 解题思路 比较简单的状压+期望.设\(f[S]\)表示\(S\)这个状态的期望,转移时挑两条活着的 ...

  6. HDU 4336 Card Collector(状压 + 概率DP 期望)题解

    题意:每包干脆面可能开出卡或者什么都没有,一共n种卡,每种卡每包爆率pi,问收齐n种卡的期望 思路:期望求解公式为:$E(x) = \sum_{i=1}^{k}pi * xi + (1 - \sum_ ...

  7. hdu 4336 Card Collector (概率dp+位运算 求期望)

    题目链接 Card Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  8. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  9. $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥

    正解:期望 解题报告: 传送门! 先放下题意,,,已知有总共有$n$张卡片,每次有$p_i$的概率抽到第$i$张卡,求买所有卡的期望次数 $umm$看到期望自然而然想$dp$? 再一看,哇,$n\le ...

  10. HDU 4336——Card Collector——————【概率dp】

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

随机推荐

  1. iOS开发数据持久化技术02——plist介绍

    有疑问的请加qq交流群:390438081 我的QQ:604886384(注明来意) 微信:niuting823 1. 简单介绍:属性列表是一种xml格式的文件.扩展名.plist: 2. 特性:pl ...

  2. jquery 创建jquery的dom对象---------------获取自身的html节点及其子节点的html

    1.var domObj = $("<dom>"); 2.var a = $("<a href='www.baidu.com'>"); ...

  3. java:注解(二)

    自定义注解 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节.在定义注解时,不能继承其他的注解或接口.@i ...

  4. js:|| 和 && 运算符 特殊用法

    引用:http://www.jb51.net/article/21339.htm 先总结一下: 几乎所有语言中||和&&都遵循“短路”原理,如&&中第一个表达式为假就不 ...

  5. iOS开发 - &quot;Cast from pointer to smaller type &#39;int&#39; loses information” 解决的方法

    今天要写一个联系人搜索算法. 百度了下, 在code4App中找到相关代码. 可是自己跑了下, 发现报错. 错误内容例如以下: "Cast from pointer to smaller t ...

  6. jQuery--基础(操作标签)

    jQuery-样式操作 .css() 可以直接使用来获取css的值   .css("color")     使用方法,如果想给查找到的标签添加样式: .css("colo ...

  7. JQ动态获取数据

    转:JQUERY获取浏览器窗口的高度和宽度 June 27, 2012 <script type="text/javascript"> $(document).read ...

  8. 浅谈WPF本质中的数据和行为

    WPF缩写为Windows Presentation Foundation的缩写,本文所要谈的就是WPF本质中的数据和行为,希望通过本文能对大家了解WPF本质有所帮助. 如果自己来做一个UI框架,我们 ...

  9. 解决pod search出来的库不是最新

    为了让CocoaPods的引入不显示警告,在Podfile最上方加上: inhibit_all_warnings! pod search 一些第三方SDK,发现并不是最新版本,那是因为你的本地repo ...

  10. SRM 626 D1L1: FixedDiceGameDiv1,贝叶斯公式,dp

    题目:http://community.topcoder.com/stat?c=problem_statement&pm=13239&rd=15859 用到了概率论中的贝叶斯公式,而贝 ...