HDU 4336 Card Collector
2013-11-17 00:50
218 查看
题意:有n种卡片,每袋零食里面有p[i]的概率含有卡片i,最多含有一张卡片,也可能不含卡片。求要收集齐n张卡片所需要买的零食袋数的期望。(1 <= n <= 20)
解法:状压DP+概率DP。设d[i]表示含有卡片的状态为i时所需的期望零食袋数。d[i] = Σ((d[i] + 1)*p[j]) + Σ((d[i|(1<<k)]+1)*p[k]),其中j表示i状态下已经拥有的卡片,k表示没有的。
tag:状压DP,概率DP
View Code
解法:状压DP+概率DP。设d[i]表示含有卡片的状态为i时所需的期望零食袋数。d[i] = Σ((d[i] + 1)*p[j]) + Σ((d[i|(1<<k)]+1)*p[k]),其中j表示i状态下已经拥有的卡片,k表示没有的。
tag:状压DP,概率DP
/* * Author: Plumrain * Created Time: 2013-11-16 21:24 * File Name: DP-HDU-4336.cpp */ #include <iostream> #include <cstdio> #include <cstring> using namespace std; #define CLR(x) memset(x, 0, sizeof(x)) double d[1<<20], p[100]; int main() { int n; while (scanf ("%d", &n) != EOF){ double px = 1.0; for (int i = 0; i < n; ++ i){ scanf ("%lf", &p[i]); px -= p[i]; } CLR (d); for (int i = (1<<n) - 2; i >= 0; -- i){ double tmp = px; for (int j = 0; j < n; ++ j){ if (!(i & (1<<j))) d[i] += p[j] * (1 + d[i|(1<<j)]); else tmp += p[j]; } d[i] = (d[i] + tmp) / (1 - tmp); } printf ("%.6f\n", d[0]); } return 0; }
View Code
相关文章推荐
- HDU 4336 Card Collector 概率dp 状态压缩| 容斥原理
- hdu 4336 Card Collector(概率dp, 容斥原理)
- 【HDU】4336 Card Collector
- hdu-4336-Card Collector-概率DP
- [HDU 4336] Card Collector (期望DP)
- HDU 4336 Card Collector 状压+概率dp
- HDU 4336 Card Collector(动态规划-概率DP)
- hdu 4336 Card Collector
- HDU 4336: Card Collector
- 期望dp-hdu-4336-Card Collector
- HDU 4336 Card Collector(动态规划-概率DP)
- HDU 4336 Card Collector [概率DP]
- HDU 4336 Card Collector(容斥)
- hdu 4336 Card Collector 容斥原理 多校联合赛(四) 第六题
- HDU 4336 Card Collector
- HDU 4336 Card Collector
- HDU 4336 Card Collector (容斥原理||概率DP)
- HDU 4336 Card Collector(状态压缩+概率DP)
- HDU-4336 Card Collector(状压概率DP||容斥原理)
- HDU 4336 Card Collector(动态规划-概率DP)