zoukankan      html  css  js  c++  java
  • HDU 4336 Card Collector

    题意:有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

     1 /*
     2  * Author:  Plumrain
     3  * Created Time:  2013-11-16 21:24
     4  * File Name: DP-HDU-4336.cpp
     5  */
     6 #include <iostream>
     7 #include <cstdio>
     8 #include <cstring>
     9 
    10 using namespace std;
    11 
    12 #define CLR(x) memset(x, 0, sizeof(x))
    13 
    14 double d[1<<20], p[100];
    15 
    16 int main()
    17 {
    18     int n;
    19     while (scanf ("%d", &n) != EOF){
    20         double px = 1.0;
    21         for (int i = 0; i < n; ++ i){
    22             scanf ("%lf", &p[i]);
    23             px -= p[i];
    24         }
    25 
    26         CLR (d);
    27         for (int i = (1<<n) - 2; i >= 0; -- i){
    28             double tmp = px;
    29             for (int j = 0; j < n; ++ j){
    30                 if (!(i & (1<<j)))
    31                     d[i] += p[j] * (1 + d[i|(1<<j)]);
    32                 else
    33                     tmp += p[j];
    34             }
    35             d[i] = (d[i] + tmp) / (1 - tmp);
    36         }
    37         printf ("%.6f
    ", d[0]);
    38     }
    39     return 0;
    40 }
    View Code
    ------------------------------------------------------------------
    现在的你,在干什么呢?
    你是不是还记得,你说你想成为岩哥那样的人。
  • 相关阅读:
    前端页面存取数据
    jquery获取元素内容-text()和val()
    jquery选择器的一些处理
    Js判断一个字符串是否包含一个子串
    防止重复点击:
    Juery实现选项卡
    行间事件传this的问题:
    从数据库中导出数据到.csv文件
    表单限制只能填入正整数
    WAMP环境配置-Mysql安装
  • 原文地址:https://www.cnblogs.com/plumrain/p/HDU_4336.html
Copyright © 2011-2022 走看看