博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4465 2012 Asia Chengdu Regional Contest 概率期望计算+对数放大/缩小幂指数+对数还原...
阅读量:4984 次
发布时间:2019-06-12

本文共 1599 字,大约阅读时间需要 5 分钟。

1 //http://www.cnblogs.com/yefeng1627/archive/2013/04/24/3040112.html 2 #include
3 #include
//最好开这个库//数学计算交c++更快 4 #include
5 #include
6 #include
7 #define maxn 410000 8 double F[maxn]; 9 void builtF()10 {11 F[1]=0;12 for(int i=1;i<=maxn;i++)13 {14 F[i]=F[i-1]+log((double)i);15 }16 return ;17 }18 double getC(int n,int m)19 {20 // if (m==0) return 1;画蛇添足21 double ans=F[n]-F[n-m]-F[m];22 return ans;23 }24 using namespace std;25 int main()26 {27 builtF();28 int n;29 double p;30 int cas=0;31 while(~scanf("%d%lf",&n,&p))32 {33 cas++;34 double p1=log(p);35 double p2=log(1-p);36 double ans=0;37 for(int i=0;i<=n-1;i++)38 {39 ans+=(n-i)*((exp(+getC(n+i,i)+(n+1)*p1+i*p2)+exp(+getC(n+i,i)+(n+1)*p2+i*p1)));40 }41 printf("Case %d: %.6f\n",cas,ans);42 }43 return 0;44 }
View Code

问题描述:两个盒子,各装n个球,每次打开一个盒子,并拿走一个球,已知每次打开盒子1的概率是p,直到某次打开一个盒子是空的,求另一个盒子剩余的球数的期望。

关键算法:1、概率计算时有个坑,就是空盒子被打开了n+1次,而不是n次。

                  所以答案就是=sum{(n-i)*C(i,n+i)*p^n*(1-p)^i*p} + sum{(n-i)*C(i,n+i)*(1-p)^n*p^i*(1-p)}   0<=i<n, i 表示非空盒中已拿走的球的个数

              2、对数放缩:

              (1)C(m,n)=n!/(m!*(n-m)!) ==>  log(C(m,n))=log(n!)-log(m!)-log((n-m)!) 要知道log(10000!)都是很小的,解决了组合数存储爆long long的问题;

              (2)我们知道p是小于1的小数,那么在p^n,n很大时就会损失精度,double也不可存储,所以我们用 log(p^n)=nlog(p);自然就可存储下来了

              (3)还原时,使用exp(sum)即可,但是要注意,使用cmath库中的数学函数时,用c++提交会大大减少时间,是900ms到200ms的差距啊!!!!

 

 

                                           

转载于:https://www.cnblogs.com/little-w/p/3399104.html

你可能感兴趣的文章
Gedit 解决中文显示乱码问题
查看>>
reset 单个文件 回退
查看>>
数据库系统
查看>>
ASP.NET Core 基础知识(九)Configuration
查看>>
pickle使用
查看>>
将多个网页制作成一个CHM文件
查看>>
txt 文件改名为fasta,并编辑规格格式
查看>>
闭包 装饰器 - 总结
查看>>
中间件
查看>>
jQuery初识之选择器、样式操作和筛选器(模态框和菜单示例)
查看>>
::作用域运算符
查看>>
memcpy memmove区别和实现
查看>>
linux 下创建并动态加载.so 文件
查看>>
python--redis
查看>>
禁用input帐号密码的自动填充
查看>>
python的小技巧
查看>>
json数组转数组对象
查看>>
KMP算法详解 转帖
查看>>
Struts2+Hibernate+Spring+Webservice 项目从Tomcat到WebLogic遇到问题的解决方法
查看>>
C# 代理/委托 Delegate
查看>>