题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336

题意:

  一共有n种卡片。每买一袋零食,有可能赠送一张卡片,也可能没有。

  每一种卡片赠送的概率为p[i],问你将n种卡片收集全,要买零食袋数的期望。

题解:

  表示状态:

    dp[state] = expectation

    state表示哪些卡片已经有了

  找出答案:

    ans = dp[0]

    什么都没有时的期望袋数

  如何转移:

    两种情况,要么得到了一张新的卡片,要么得到了一张已经有的卡片或者啥都没有。

      dp[state] = ∑ (dp[state|(1<<i)]*p[i]) + dp[state]*(1 - ∑ p[i]) + 1

      ((state>>i)&1 == 0)

    移项后:

      dp[state] = ( ∑ (dp[state|(1<<i)]*p[i]) + 1 ) / ∑ p[i]

  边界条件:

    dp[(1<<n)-1] = 0

    已经集全了。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 25
#define MAX_S ((1<<20)+50) using namespace std; int n;
double p[MAX_N];
double dp[MAX_S]; int main()
{
while(cin>>n)
{
for(int i=;i<n;i++) scanf("%lf",&p[i]);
dp[(<<n)-]=;
for(int state=(<<n)-;state>=;state--)
{
double sum=;
dp[state]=;
for(int i=;i<n;i++)
{
if(!((state>>i)&))
{
dp[state]+=dp[state|(<<i)]*p[i];
sum+=p[i];
}
}
dp[state]=(dp[state]+1.0)/sum;
}
printf("%.5f\n",dp[]);
}
}

最新文章

  1. cms真实问题的来源以及模拟解决方案
  2. Page in/Page out/Page fault
  3. JAVA CDI 学习(2) - Scope 生命周期
  4. Apache Nutch v2.3 发布,Java实现的网络爬虫
  5. 1.Redis安装(转)
  6. OSG入门即osgEarth建立一个地球的详细步骤
  7. 招聘一个靠谱的 iOS
  8. UVa 1640 (计数) The Counting Problem
  9. Java实战之04JavaWeb-02Request和Response
  10. Oracle 错误码
  11. javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)
  12. 使用Microsoft.AspNetCore.TestHost进行完整的功能测试
  13. 【redis 基础学习】(六)Redis HyperLogLog
  14. TPYBoard开发板搭建,实现隐秘通信
  15. django----Form提交按钮
  16. svn 清理失败的解决方法
  17. Java并发编程笔记之ThreadLocal内存泄漏探究
  18. 「每日一码」a&amp;b赋值问题
  19. Calculate CRC32 as in STM32 hardware (EWARM v.5.50 and later)
  20. VS2015使用小技巧

热门文章

  1. [译]GLUT教程 - 移动镜头2
  2. mapreduce学习资料
  3. IIS7设置默认页
  4. bg、fg、nohup
  5. PHP中常见的几种运行代码的方式
  6. ActivityLifecycleCallbacks 如何控制activity的生命周期
  7. C语言基础知识【判断】
  8. windows安装apache
  9. C# 关于类型转换 面试题
  10. EasyNVR无插件摄像机直播之:摄像机网页低延时无插件直播实现