HDU 4336:Card Collector 期望+状压

Posted kiuhghcsc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4336:Card Collector 期望+状压相关的知识,希望对你有一定的参考价值。

Card Collector

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4336

题意:

去商店里买零食,每包零食里最多有1张卡片,也有可能没有,问要集齐所有n(n≤20)种卡片所需要购买零食个数的期望。

 

题解:

设dp[i](二进制,对应位为1表示已经有该卡片)为以当前状态为起点还需要购买零食个数的期望,则dp[0]即答案

对DP求解期望有问题的可以看下这里

             

代码

#include<stdio.h>
#include<string.h>
const int N=20;
double dp[1<<N],p[N],x;
int main()
{
  int n;
  while(~scanf("%d",&n))
  {
    dp[(1<<n)-1]=0.0;
    for(int i=0;i<n;++i)
    scanf("%lf",&p[i]);
    for(int j=(1<<n)-2;j>=0;--j)
    {
      x=0;dp[j]=0.0;
      for(int k=0;k<n;++k)
      {
        if(!((1<<k)&j))
        dp[j]+=dp[j+(1<<k)]*p[k],x+=p[k];
      }
      dp[j]=(dp[j]+1.0)/x;
    }
    printf("%.5f\\n",dp[0]);
  }
}

  

以上是关于HDU 4336:Card Collector 期望+状压的主要内容,如果未能解决你的问题,请参考以下文章

HDU 4336 Card Collector(状态压缩+概率DP)

hdu 4336 Card Collector——最值反演

HDU 4336 Card Collector

HDU4336Card Collector (动态规划,数学期望)

HDU 4336:Card Collector 期望+状压

[HDU4336]Card Collector