题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336

题目大意:有n种卡片,需要吃零食收集,打开零食,出现第i种卡片的概率是p[i],也有可能不出现卡片。问你收集齐n种卡片,吃的期望零食数是多少?

状态压缩:f[mask],代表收集齐了mask,还需要吃的期望零食数。

打开包装,有3种情况,第一种:没有卡片,概率(1-sigma(p[i]))

第二种,在已知种类中:概率sigma(p[j])

第三种,在未知种类中:p[k]

因此 f[mask] = f[mask]*(1-sigma(p[i])) + f[mask] * sigma(p[j]) + sigma(f[mask|k]*p[k]) + 1

 ///#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <bitset>
#include <cmath>
#include <numeric>
#include <iterator>
#include <iostream>
#include <cstdlib>
#include <functional>
#include <queue>
#include <stack>
#include <string>
#include <cctype>
using namespace std;
#define PB push_back
#define MP make_pair
#define SZ size()
#define ST begin()
#define ED end()
#define CLR clear()
#define ZERO(x) memset((x),0,sizeof(x))
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;
const double EPS = 1e-; const int MAX_N = ;
int N;
double p[MAX_N+],f[<<MAX_N]; int main(){ while( ~scanf("%d",&N) ) {
ZERO(f);
double sum = 0.0;
for(int i=;i<=N;i++){
scanf("%lf",&p[i]);
sum += p[i];
}
f[(<<N)-] = ;
for( int mask=(<<N)-;mask>=;mask-- ){
double p1 = ;
for(int i=;i<N;i++){
if( (mask>>i)& ) {
p1 += p[i+];
}
}
// printf("p1 = %f\n",p1);
double p2 = ;
for(int i=;i<N;i++){
if( !((mask>>i)&) ) {
p2 += f[mask|(<<i)]*p[i+];
// printf("f[mask|(1<<i)]=%f\n",f[mask|(1<<i)]);
}
}
// printf("p2 = %f\n",p2);
f[mask] = (p2+1.0)/(sum-p1);
}
printf("%.10f\n",f[]);
} return ;
}

[HDU 4336] Card Collector (状态压缩概率dp)的更多相关文章

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

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

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

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

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

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

  4. hdu 4336 Card Collector(期望 dp 状态压缩)

    Problem Description In your childhood, people in the famous novel Water Margin, you will win an amaz ...

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

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

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

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

  7. HDU 4336 Card Collector:状压 + 期望dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意: 有n种卡片(n <= 20). 对于每一包方便面,里面有卡片i的概率为p[i],可 ...

  8. hdu4336 Card Collector 状态压缩dp

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

  9. hdu 4649 Professor Tian 反状态压缩+概率DP

    思路:反状态压缩——把数据转换成20位的01来进行运算 因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就 ...

随机推荐

  1. ajax java base64 图片储存

    js代码 //利用formdata上传 var dataUrl = $('#canvas').getDataUrl(); var img = $('<img>').attr('src', ...

  2. Ibator的配置和使用

    1.     Ibator介绍 Ibator是iBATIS的代码发生器,其原名叫abator,后来更名为Ibator,同时代码结构也做了相应的一些修改,所以两者的配置也有所不同.Ibator可以生成一 ...

  3. js判断类型方法

    在JavaScript中,有5种基本数据类型和1种复杂数据类型,基本数据类型有:Undefined, Null,Boolean, Number和String:复杂数据类型是Object,Object中 ...

  4. SVM

    sDJgfklJGV;LAKi管理科JF看了UFO李开复LKFLKJF EDJFO很疯狂的复活卡划分KJF

  5. Java中的Object类介绍

    Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类. Object类中的所有方法适用于所有子类 Object中比较常见的方法: ...

  6. Spring 发送 Email

    本文转自:http://zl198751.iteye.com/blog/757617 看到了本文,收获颇丰,感谢之至! 首先介绍下Email的发送流程: 需要选中smtp邮件服务器,Yahoo不提供免 ...

  7. LeetCode() Largest Number

    全排列,超时,知道超时,只是想验证一下. class Solution { public: string largestNumber(vector<int>& nums) { so ...

  8. 自定cordova插件笔记demo

    1.在项目根目录下(我的是com.chl),添加一个文件夹,在文件夹里添加src.www两个子文件夹和plugin.xml文件.在www目录下,创建test.js.在src文件夹下添加android子 ...

  9. hdu1087 dp

    题意:给定一串数字,要求选取一个严格递增的子序列,使序列和最大. dp[i] 表示以 i 为结尾的子序列的最大和,dp[i] = max{dp[j]+a[i]}(j 从 0 到 i-1),dp[0]是 ...

  10. Mac使用wireshark对移动设备抓包

    在系统偏好设置中,打开蓝牙共享网络,就能让移动设备通过连接蓝牙来访问网络,这个途径访问都会被wireshark所抓 然后捕获接口中可选 设置 筛选 为 http and (ip.src == 192. ...