题意:

买东西集齐全套卡片赢大奖。每个包装袋里面有一张卡片或者没有。

已知每种卡片出现的概率 p[i],以及所有的卡片种类的数量 n(1<=n<=20)。

问集齐卡片需要买东西的数量的期望值。

一开始,自己所理解的期望值是原来学过的  一个值*它自身发生的概率,这没错,但是不知道在这一题里面 那个值是多少

经过重重思考和挣扎最后明白了,这一题中,n就是那个值,也是你要求的,感觉理解这个好难,但是好重要,

此题中,将n设置为 dp[0]

可以这样想,你要买sum包,才能集齐n种卡片,那么 你最后买的一包一定中奖,即一定是n种中的一种,

用状态压缩表示,dp[1111111]就表示,你现在可以要n包中的一包,也就是可以变成0111111,1011111,1101111.。。。1111110中的一种状态

dp[1111111]=上面列的所有的状态 乘以 中0那包的概率,即dp[i]+=dp[i|(1<<j)]*p[j];

而dp[1111111]表示刚开始,你可以中任一种,它的期望值是0,因为你现在任一种都没有,

dp[0000000]即 dp[0] 则表示现在每一包都有,你已经不用买了,从直观上就可以理解为每位都是0,你没有选择了,

那么,给初值dp[(1<<n)-1]=0,

从这开始,对每一种状态,列举它的每一位,如果是0,则可以变成该位是1的状态,

恩,,差不多就是这样吧。。

不知道自己的理解是否正确 觉得关键还是期望值的意义和最后的结果的意义不太能理解。。

反正我只能理解到这一步了,望批评指正交流

关于容斥原理的解法,还没怎么想,大家可以百度下 ,看起来好简单的样子

下面是参考代码,大家感受下

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std; double p[25],dp[1<<20]; int main()
{
int i,j,n;
double pp;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%lf",&p[i]);
dp[(1<<n)-1]=0;
for(i=(1<<n)-2;i>=0;i--)//枚举所有状态
{
pp=0;
dp[i]=1;
for(j=0;j<n;j++)//对每一位枚举
{
if(!(i&(1<<j)))//该位是0
{
dp[i]+=dp[i|(1<<j)]*p[j];
pp+=p[j];
}
}
dp[i]/=pp;//可以到达i这种状态的状态都找到了 在循环里累加的是期望值 要除概率和
}
printf("%lf\n",dp[0]);
}
return 0;
}

hdu4336 Card Collector 概率dp(或容斥原理?)的更多相关文章

  1. HDU-4336 Card Collector 概率DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:买食品收集n个卡片,每个卡片的概率分别是pi,且Σp[i]<=1,求收集n个卡片需要 ...

  2. hdu4336 Card Collector(概率DP,状态压缩)

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

  3. HDU4336 Card Collector (概率dp+状压dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:有n种卡片,一个包里会包含至多一张卡片,第i种卡片在某个包中出现的次数为pi,问将所有种类的卡片集齐 ...

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

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

  5. hdu4336 Card Collector 状态压缩dp

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

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

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

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

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

  8. [HDU4336]:Card Collector(概率DP)

    题目传送门 题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生日礼物.商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值$W_i$(每种礼物的喜悦值不能重复获得).每 ...

  9. hdu4336 Card Collector 容斥原理

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

随机推荐

  1. ISO-8859-1

    ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号 ...

  2. nagios监控远程主机服务可能出现的问题

    1.使用插件NRPE监控命令不存在 在添加服务的时候,命令配置文件中需要传递一个参数,那么在监控服务配置文件中,需要添加一个!表示后面的为参数. 出现未定义的命令,查看被监控主机上的配置文件,添加监控 ...

  3. AI钻石风格logo教程

    最终图像 与往常一样,这是我们要创建的最终图像: Step 1 按Ctrl+ N创建新文档.从单位下拉菜单中选择像素,在宽度和高度框中输入600,然后单击高级按钮.选择RGB,屏幕(72 PPI),并 ...

  4. FTP没权限直接删除目录,写的一个小工具循环删除

    $path = '/var/www/html/Runtime/'; $ite = new RecursiveDirectoryIterator($path); foreach (new Recursi ...

  5. esb异常20160322_1948

    异常1. Failed to find entry point for component, the following resolvers tried but failed: [ 2016-03-2 ...

  6. POJ 3172 Scales (01背包暴力)

    题意:给定 n 个数,保证下一个数比上一个数和前一个数之和大,然后给定一个背包,问你最多放多少容积. 析:应该是很明显的01背包,但是可惜的是,数组开不出来,那就得考虑暴力,因为数不多,才几十而已,要 ...

  7. MD5加密类方法

    package com.shkj.android.utils; import java.security.MessageDigest;import java.security.NoSuchAlgori ...

  8. 用ILMerge.exe合并dll

    F:\ILMerge>ILMerge /targetplatform:v4,"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319" / ...

  9. Spring aop expression

    任意公共方法的执行:execution(public * *(..))任何一个名字以“set”开始的方法的执行:execution(* set*(..))AccountService接口定义的任意方法 ...

  10. Ehcache(05)——缓存的查询

    http://haohaoxuexi.iteye.com/blog/2117505 缓存的查询 目录 1.    使Cache可查询 1.1     基于Xml配置 1.2     基于代码的配置 2 ...