传送门

##解题思路
  第一种方法是状压$dp$,设$f(S)$为状态$S$到取完的期望步数,那么$f(S)$可以被自己转移到,还可以被$f(S|(1<<i))$转移到,$i$为$S$中没有的一个元素。
  第二种方法是$Min-Max$反演,要求的其实就是$max(S)$,反演得$max(S)=\sum\limits_{T\subseteq S}min(T)$,而$min(T)=\sum p(i)$($i$是$T$的子集)。

##代码
状压

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib> using namespace std;
const int N=20; int n;
double p[N+2],ans,f[(1<<N)+2]; int main(){
while(~scanf("%d",&n)){
memset(f,0,sizeof(f));
for(int i=1;i<=n;i++) scanf("%lf",&p[i]);
for(int S=(1<<n)-2;~S;S--){
double sum=0,now=0;
for(int j=1;j<=n;j++)
if(!((1<<(j-1))&S)) now+=p[j],sum+=p[j]*f[S|(1<<(j-1))];
f[S]=sum/now+1/now;
}
printf("%.5lf\n",f[0]);
}
return 0;
}

$Min-Max$反演

#include<iostream>
#include<cstdio>
#include<cstdlib> using namespace std;
const int N=22; int n;
double ans,p[N]; int main(){
while(~scanf("%d",&n)){
ans=0;
for(int i=1;i<=n;i++) scanf("%lf",&p[i]);
for(int S=1;S<(1<<n);S++){
int cnt=0;double now=0;
for(int i=1;i<=n;i++)
if(S&(1<<(i-1))) cnt++,now+=p[i];
if(cnt&1) ans+=1/now;
else ans-=1/now;
}
printf("%.7lf\n",ans);
}
return 0;
}

hdu 4336 Card Collector(状压dp/Min-Max反演)的更多相关文章

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

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

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

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

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

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意: 一共有n种卡片.每买一袋零食,有可能赠送一张卡片,也可能没有. 每一种卡片赠送的概率为p ...

  4. hdu 3247 AC自动+状压dp+bfs处理

    Resource Archiver Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Ot ...

  5. hdu 2825 aC自动机+状压dp

    Wireless Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  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. $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥

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

  8. hdu 4856 Tunnels (bfs + 状压dp)

    题目链接 The input contains mutiple testcases. Please process till EOF.For each testcase, the first line ...

  9. HDU 5765 Bonds(状压DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5765 [题目大意] 给出一张图,求每条边在所有边割集中出现的次数. [题解] 利用状压DP,计算不 ...

随机推荐

  1. Leetcode_897. Increasing Order Search Tree

    题目:https://leetcode.com/problems/increasing-order-search-tree/ 题意: 将一棵二叉搜索树,重排为一棵递增的二叉排序树. 解法1: rson ...

  2. vue之条件语句小结

    vue之条件语句小结 v-if, v-else 随机生成一个数字,判断是否大于0.5,然后输出对应信息: <!DOCTYPE html> <html> <head> ...

  3. 转载:VScode 好用插件集合

    --------------------- 作者:JayveeWong 来源:CSDN 原文:https://blog.csdn.net/weixin_42776111/article/details ...

  4. wsl中加载git之后,发现文件是修改状态

    查看git status,发现所有文件都被修改. git diff文件查看,发现是行尾的问题导致的. https://github.com/Microsoft/WSL/issues/184 在wsl里 ...

  5. 用 Flask 来写个轻博客 (22) — 实现博客文章的添加和编辑页面

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 新建表单 新建视图函数 新建模板 在博客文章页面添加 New 和 Ed ...

  6. Thrift报错:Error: Thrift compiler: Failed to translate files. Error: Cannot run program thrift error=2

    文章目录 报错: 原因: 解决: 报错: Error: Thrift compiler: Failed to translate files. Error: Cannot run program th ...

  7. left、pixelLeft、posLeft的区别

    yexj00.style.pixelLeft=50yexj00.style.left=50pxyexj00.style.posLeft=50he.style.pixelLeft=39he.style. ...

  8. no sucn file or directory,scandir.......node-sass

    an 解决方法 运行 npm rebuild node-sass

  9. cpupower:Shows and sets processor power related values

    软件包: * sys-power/cpupower Latest version available: Latest version installed: Size of files: KiB Hom ...

  10. spring data jpa Specification动态查询

    package com.ytkj.entity; import javax.persistence.*; import java.io.Serializable; /** * @Entity * 作用 ...