http://acm.hdu.edu.cn/showproblem.php?pid=4336

题意:有n种卡片,一个包里会包含至多一张卡片,第i种卡片在某个包中出现的次数为pi,问将所有种类的卡片集齐需要买的包的期望。 
注意存在某个包中一张也没有。

分析:状态压缩有个挺显然提示,N<=20,这是在次落落的在提示你。

我们首先定义: dp[st] 表示 st 状态到目标状态 的期望是多少 ; st转化为二进制0表示当前状态没有这个bit的卡片 , 1表示当前状态有这个bit位的卡片;

然后有如下的转移:1. 没有卡片-> dp[st]->dp[st]   2.有存在的卡片;dp[st]->dp[st]  3.有没有存在的卡片  :dp[st]->dp[st|(1<<bit)]

所以我们可以得到如下公式:

则dp[i]=no*(dp[i]+1)+∑pp[j]*(dp[i]+1)+∑pp[k]*(dp[i|(1<<k)]+1).----(1)

no:表示没有卡片的概率,∑pp[j]表示第j种卡片已经存在,∑pp[k]表示第j种卡片当前还没有。

显然no+∑pp[j]+∑pp[k]=1,所以花间得dp[i]=1+(no+∑pp[j])*dp[i]+∑pp[k]*dp[i|(1<<k)],dp[1<<n-1]=0递推求出dp[0]即可。

需要注意的是:(1)公式是需要进行化简的 , 需要将dp[i] 提取出来

#include<bits/stdc++.h>
using namespace std;
double dp[(<<)+],p[];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(dp,,sizeof(dp));
double no=;
for(int i= ; i<n ; i++)
{
scanf("%lf",&p[i]);
no+=p[i];
}
no=-no;
int all=(<<n)-;
dp[all]=;
for(int st=all- ; st>= ; st--)///枚举的状态
{ double pj=,pk=;
for(int j= ; j<n ; j++)
{
if(!(st&(<<j)))
{
pk+=p[j]*(dp[st|(<<j)]);
}
else
{
pj+=p[j];
}
} dp[st]=(+pk)*1.0/(-no-pj); }
printf("%.4f\n",dp[]);
} }

HDU4336 Card Collector (概率dp+状压dp)的更多相关文章

  1. 【BZOJ】1076 [SCOI2008]奖励关 期望DP+状压DP

    [题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n&l ...

  2. Luogu4547 THUWC2017 随机二分图 概率、状压DP

    传送门 考虑如果只有$0$组边要怎么做.因为$N \leq 15$,考虑状压$DP$.设$f_i$表示当前的匹配情况为$i$时的概率($i$中$2^0$到$2^{N-1}$表示左半边的匹配情况,$2^ ...

  3. 洛谷 P3343 - [ZJOI2015]地震后的幻想乡(朴素状压 DP/状压 DP+微积分)

    题面传送门 鸽子 tzc 竟然来补题解了,奇迹奇迹( 神仙题 %%%%%%%%%%%% 解法 1: 首先一件很明显的事情是这个最小值可以通过类似 Kruskal 求最小生成树的方法求得.我们将所有边按 ...

  4. CCF 201312-4 有趣的数 (数位DP, 状压DP, 组合数学+暴力枚举, 推公式, 矩阵快速幂)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  5. hdu 4352 "XHXJ's LIS"(数位DP+状压DP+LIS)

    传送门 参考博文: [1]:http://www.voidcn.com/article/p-ehojgauy-ot.html 题解: 将数字num字符串化: 求[L,R]区间最长上升子序列长度为 K ...

  6. [转]状态压缩dp(状压dp)

    状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...

  7. 状态压缩dp 状压dp 详解

    说到状压dp,一般和二进制少不了关系(还常和博弈论结合起来考,这个坑我挖了还没填qwq),二进制是个好东西啊,所以二进制的各种运算是前置知识,不了解的话走下面链接进百度百科 https://baike ...

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

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

  9. hdu4336 Card Collector 概率dp(或容斥原理?)

    题意: 买东西集齐全套卡片赢大奖.每个包装袋里面有一张卡片或者没有. 已知每种卡片出现的概率 p[i],以及所有的卡片种类的数量 n(1<=n<=20). 问集齐卡片需要买东西的数量的期望 ...

随机推荐

  1. 【ABAP系列】SAP abap dialog screen屏幕参数简介

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP abap dialog ...

  2. PHPstorm Xdebugger最全详细

    0 Xdebug调试的原理(选看) 图0-1 单机调试原理示意图 图0-2 多机调试原理示意图 对于PHP开发,初来咋到,开发环境的搭建和理解感觉是最烦人的一件事了.不像JAVA,打开一个Eclips ...

  3. ceph部署-基础部署

    一.硬件要求:CPU:4C内存:每个守护进程需要500MRAM,1TB存储对应1GRAM磁盘:至少1TB网卡:1GB以上,最好两个 centos7环境安装 二.CEPH安装1.建立管理节点(1)添加y ...

  4. Tomcat控制台

    一般在安装完成Tomcat之后,我们需要验证tomcat是否安装成功,在浏览器的url中输入:http://127.0.0.1:8080/,就会进入如下的页面(表示安装成功): 在上面的左侧顶部,有一 ...

  5. python程序daemon化

    1 直接空格加& python flask_server.py & 最简单的方式 这样还不行,不知道为什么flask server会自动退出. $ nohup python flask ...

  6. 6、 逻辑回归(Logistic Regression)

    6.1 分类问题 在分类问题中,你要预测的变量

  7. vue.js(17)--vue的组件切换

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. linux设定 runlevel 3

    runlevel 查看当前系统运行级别 vi /etc/inittab //运行级别配置文件

  9. 02机器学习实战之K近邻算法

    第2章 k-近邻算法 KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法. 一句话总结:近朱者赤近墨者黑! k ...

  10. Google Capture The Flag 2018 (Quals) - Reverse - Beginner's Quest - Gatekeeper

    参考链接:https://ctftime.org/task/6264 题目 It's a media PC! All fully purchased through the online subscr ...