zoukankan      html  css  js  c++  java
  • 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 ",dp[0]);
      }
    }

      

  • 相关阅读:
    第19篇 2016年计划
    第18篇 我的中国梦
    Linux中文件实时同步
    Ansible Playbook
    Ansible简介及常用模块
    HTTP协议简单认识
    zabbix 分布式监控Proxy
    Zabbix中Agent自动注册
    Groovy基础语法
    Python文件操作
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5579111.html
Copyright © 2011-2022 走看看