[HDU 4336] Card Collector (状态压缩概率dp)
2015-06-07 13:39
405 查看
题目链接: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
题目大意:有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-8; const int MAX_N = 20; int N; double p[MAX_N+1],f[1<<MAX_N]; int main(){ while( ~scanf("%d",&N) ) { ZERO(f); double sum = 0.0; for(int i=1;i<=N;i++){ scanf("%lf",&p[i]); sum += p[i]; } f[(1<<N)-1] = 0; for( int mask=(1<<N)-2;mask>=0;mask-- ){ double p1 = 0; for(int i=0;i<N;i++){ if( (mask>>i)&1 ) { p1 += p[i+1]; } } // printf("p1 = %f\n",p1); double p2 = 0; for(int i=0;i<N;i++){ if( !((mask>>i)&1) ) { p2 += f[mask|(1<<i)]*p[i+1]; // 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[0]); } return 0; }
相关文章推荐
- arduino用串口控制LGB
- cocos2dx 3.2 + vs2012 + win7 工具栏<本地Windows调试器>不见了
- node.js中关于使用formidable模块实现文件上传至指定目录的问题
- linux入门基础——网络基础
- recycleview 报 NullPointerException
- 攻略三战的完美体验3Castle Fantisia阿兰·梅希亚战争艾伦西战记它包含重做版本(这是新的艾伦·梅希亚大战)
- 第五章 指针
- 杨一笑传
- Eclipse 关联源码 ( src.zip)
- 求两个分数的最小公倍数
- Linux常用网络工具:路由扫描之traceroute
- Qt窗体拖拽的实现方法
- ACdream 1195 Sudoku Checker (暴力)
- 复习c#
- CentOS 6.5 编译安装 gcc-4.9.2
- Eclipse 关联中文 api
- !HDU 1158 Employment Planning--DP--(二维)
- Dynamic Parallelism
- java 连接数据库(oracle)之加载驱动包
- 数据结构和算法