题目大意不多说了

这里用dp[i][0] 代表取完第一个盒子后第二个盒子剩 i 个的概率,对应期望就是dp[i][0] *i

dp[i][1] 就代表取完第二个盒子后第一个盒子剩 i 个的概率

dp[i][0]  =  p^(n+1) * (1-p)^(n-i) * C(2*n-i , n-i) = p^(n+1) * (1-p)^(n-i) * (2*n-i)! / (n-i)! / n!

dp[i+1][0]  = p^(n+1) * (1-p)^(n-i-1) * C(2*n-i-1 , n-i-1) = p^(n+1) * (1-p)^(n-i-1) * (2*n-i-1)! / (n-i-1)! / n!

dp[i][0] = dp[i+1][0] * (1-p) * (2*n-i) / (n-i)

dp[i][1]也是一样的道理

如果一开始给dp[n][0] 赋初值 pow(p,n+1) 那么如果n过大,那么因为精确度问题得到的是0

所以n+1个p在计算过程中在答案超过总数时一个一个往里乘

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cmath>
  4. using namespace std;
  5. const int N = ;
  6. double dp[N][];
  7.  
  8. int main()
  9. {
  10. // freopen("test.in","rb",stdin);
  11.  
  12. int n,cas = ;
  13. double p;
  14. while(scanf("%d%lf",&n,&p)!=EOF){
  15. double ans1 = ;
  16. double ans2 = ;
  17. int last[];
  18. last[] = last[] = n+;
  19. double q = -p;
  20. dp[n][] = ;
  21. dp[n][] = ;
  22. ans1 += n;
  23. ans2 += n;
  24. for(int i=n-;i>=;i--){
  25. double tmp1 = q * (*n-i) / (n-i);
  26. double tmp2 = p * (*n-i) / (n-i);
  27.  
  28. //递推过程,因为数目太多,p直接开方,数据大点的话就直接因精确度不够变为0
  29. //所以每次在答案超过总数的情况下乘个p值
  30. dp[i][] = tmp1 * dp[i+][];
  31. dp[i][] = tmp2 * dp[i+][];
  32. ans1 += (dp[i][] * i);
  33. while(ans1>n){
  34. dp[i][] *= p;
  35. ans1 *= p;
  36. last[]--;
  37. }
  38. ans2 += (dp[i][] * i);
  39. while(ans2>n){
  40. dp[i][]*=q;
  41. ans2 *= q;
  42. last[]--;
  43. }
  44. }
  45. // cout<<" dp "<<dp[n]<<endl;
  46. ans1 *= pow(p,last[]);
  47. ans2 *= pow(q,last[]);
  48. cas++;
  49.  
  50. printf("Case %d: %.6f\n",cas,ans1+ans2);
  51. }
  52. return ;
  53. }

HDU 4465 递推与double的精确性的更多相关文章

  1. HDOJ(HDU).2044-2049 递推专题

    HDOJ(HDU).2044-2049 递推专题 点我挑战题目 HDU.2044 题意分析 先考虑递推关系:从1到第n个格子的时候由多少种走法? 如图,当n为下方格子的时候,由于只能向右走,所以有2中 ...

  2. HDU 2842 (递推+矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...

  3. "红色病毒"问题 HDU 2065 递推+找循环节

    题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=2065 递推类题目, 可以考虑用数学方法来做, 但是明显也可以有递推思维来理解. 递推的话基本就是状态 ...

  4. Children’s Queue HDU 1297 递推+大数

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1297 题目大意: 有n个同学, 站成一排, 要求 女生最少是两个站在一起, 问有多少种排列方式. 题 ...

  5. hdu 2044-2050 递推专题

    总结一下做递推题的经验,一般都开成long long (别看项数少,随便就超了) 一般从第 i 项开始推其与前面项的关系(动态规划也是这样),而不是从第i 项推其与后面的项的关系. hdu2044:h ...

  6. ZOJ 3182 HDU 2842递推

    ZOJ 3182 Nine Interlinks 题目大意:把一些带标号的环套到棍子上,标号为1的可以所以操作,标号i的根子在棍子上时,只有它标号比它小的换都不在棍子上,才能把标号为i+1的环,放在棍 ...

  7. hdu 2604 递推 矩阵快速幂

    HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #inclu ...

  8. hdu 4055 递推

    转自:http://blog.csdn.net/shiqi_614/article/details/7983298 题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果 ...

  9. HDU 3123-GCC(递推)

    GCC Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Subm ...

随机推荐

  1. 找规律/贪心 Codeforces Round #310 (Div. 2) A. Case of the Zeros and Ones

    题目传送门 /* 找规律/贪心:ans = n - 01匹配的总数,水 */ #include <cstdio> #include <iostream> #include &l ...

  2. how-to-fix-fs-re-evaluating-native-module-sources-is-not-supported-graceful

    http://stackoverflow.com/questions/37346512/how-to-fix-fs-re-evaluating-native-module-sources-is-not ...

  3. Oracle查看所有表空间的数据使用情况

    -- 查看所有表空间的数据使用情况 SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)& ...

  4. android:fillViewport="true"让ScrollView内的view强行match_parent

    当你想让一个高度值不足scrollview的子控件fillparent的时候,单独的定义android:layout_height="fill_parent"是不起作用的,必须加上 ...

  5. 线程池机制使nginx性能提高9倍

    原文标题:Thread Pools in NGINX Boost Performance 9x! 原文官方地址:https://www.nginx.com/blog/thread-pools-boos ...

  6. poj2573Bridge(过桥问题)

    链接 A,B为最快和次快 有两种方式可以使c,d过桥 一是a与c一起走,a回来接d再与d一起走,一直到对岸人为0为止 而是 a与b一起走 a回来送灯 c与d一起走 b回来送灯 重复此过程. 只剩2人时 ...

  7. 前台js获得json数据

    $.ajax({ type:"post", url:"testAction.action", data:{ classId:classId }, success ...

  8. Webform 内置对象 Session对象、Application全局对象,ViewState

    Session 每台电脑访问服务器,都有独立的session,key值都一样,内容不一样. 1.session保存在服务器上. 2.session没有持久性,保存周期就是20分钟. 重点: sessi ...

  9. [BZOJ1088][SCOI2005]扫雷Mine DP

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1088 记录下每一个格子对应左边格子放的雷的情况,然后dp转移就好了. #include&l ...

  10. MVC中使用MVCPager简单分页

    一.建立数据库以及建立MVC项目 自己随便建立一个数据库,并且添加数据.我建立的数据库如下. 二.建立LINQ to SQL映射. 然后一步步点确定 三.编写代码 在Controllers中建立控制器 ...