hdu 4336 Card Collector(状压dp/Min-Max反演)
##解题思路
第一种方法是状压$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反演)的更多相关文章
- HDU 4336——Card Collector——————【概率dp】
Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 4336 Card Collector (概率dp+位运算 求期望)
题目链接 Card Collector Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4336 Card Collector:期望dp + 状压
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意: 一共有n种卡片.每买一袋零食,有可能赠送一张卡片,也可能没有. 每一种卡片赠送的概率为p ...
- hdu 3247 AC自动+状压dp+bfs处理
Resource Archiver Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Ot ...
- hdu 2825 aC自动机+状压dp
Wireless Password Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- HDU 4336 Card Collector 期望dp+状压
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4336 Card Collector Time Limit: 2000/1000 MS (Java/O ...
- $HDU$ 4336 $Card\ Collector$ 概率$dp$/$Min-Max$容斥
正解:期望 解题报告: 传送门! 先放下题意,,,已知有总共有$n$张卡片,每次有$p_i$的概率抽到第$i$张卡,求买所有卡的期望次数 $umm$看到期望自然而然想$dp$? 再一看,哇,$n\le ...
- hdu 4856 Tunnels (bfs + 状压dp)
题目链接 The input contains mutiple testcases. Please process till EOF.For each testcase, the first line ...
- HDU 5765 Bonds(状压DP)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5765 [题目大意] 给出一张图,求每条边在所有边割集中出现的次数. [题解] 利用状压DP,计算不 ...
随机推荐
- java 通过反射调用属性,方法,构造器
package reflection2; import static org.junit.Assert.assertArrayEquals; import java.lang.reflect.Cons ...
- CodeForces - 849B 几何
题意:给n个点,问是否能两条平行线覆盖所有的点 思路:因为要求全部覆盖,所以我们第一个点肯定是会入其中一条直线,其实只用判前三个点的所有情况即可 #include<stdio.h> #in ...
- A Bug's Life - poj2492
Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descr ...
- 简单js表单验证
简单js表单验证demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org ...
- 北风设计模式课程---解释器模式(Interpreter Pattern)
北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...
- 回复git@vger.kernel.org的注意事项
比如回复这封邮件 https://public-inbox.org/git/db2dcf54-8b1c-39b1-579c-425ef158c6a1@kdbg.org/ Reply instructi ...
- offsetleft 和 style.left 的区别
offsetLeft 获取的是相对于父对象的左边距: left 获取或设置相对于 具有定位属性(position定义为relative)的父对象 的左边距: 如果父div的position定义为rel ...
- mybatis 查询一对一
官方文档 Mapper接口 public interface UserMapper { User getUser(int userId); } public interface ArticleMapp ...
- [题解]Print a 1337-string...-数学(codeforces 1202D)
题目链接:https://codeforces.com/problemset/problem/1202/D 题意: 构造一串只由 ‘1’,‘3’,‘7’ 组成的字符串,使其 ‘1337’ 子序列数量为 ...
- git笔记十:本地仓库同步到gitlab
本地仓库同步到gitlab 帮助文档 git remote --help 操作场景: 本地创建git仓库(含有readme.md文件), commit了三次 gitlab网站创建了一个项目 添加了re ...