【2012东莞市选】时间流逝(flow)——概率题
2018-01-22 07:42
489 查看
【2012东莞市选】时间流逝(flow)
Time Limits: 1s Memory Limits: 256MBDescription
生活可以很简单。可以探索水底世界的神秘,也可以去发现奇特新生物,亦或踏上一段新生的旅程。在必须要迎接挑战或跟周围的生物进行生存争夺之前,享受自由的飞翔。此时你会觉得生活是如此美好。
像蛇喜欢吃浮游生物一样(哦,我好像忘记告诉你这个常识),每天,你可以吃一些你周围的基础生物,然后会在你的尾巴上得到一个能量圈。你将会有好多种不同的能量圈,每一个都会被赋予一个能量。你可以拥有多个同种的能量圈,但是对于新得到的能量圈,它的能量不能大于你已拥有的任何一个能量圈。在前面规则的前提下,获得新的能量圈的种类的概率是一样的。一天天过去,你得到越来越多的能量,开始了进化演变。
但是你也有自己的问题,有时你会面对邪恶的果冻鱼。它会追着你咬你,你不得不扔出最小能量值的能量圈然后赶忙逃跑。在这种情况下,你不会有任何的胃口了,因此这天你将不再得到任何能量圈。幸好,当你没有任何能量圈的时候,果冻鱼就算看见你也不会追着你,此时你可以好好地享用美食。
你听说当你的总的能量值超过了某个阈值之后,可以进化成强大模式并能够吃掉果冻鱼。是时候反击了!下面是本题的问题:预计要过多少天你才能进化成强大模式?(第一天默认你没有任何能量圈)
Input
输入包含多个测例。对每个测例会有两行。第一行是一个浮点数P,一个整数T和一个整数N。P是每天遇到果冻鱼的概率,T是阈值。第二行是N个不同的正整数,表示每一种能量圈的能量值。
Output
对于每个测例,输出一行表示预计要过多少天你的能量值能够超过阈值,四舍五入到三位小数。
Sample Input
0.5 0 1 1 0.5 1 2 1 2
Sample Output
1.000 2.000
Hint
对于所有数据,0.1≤P≤0.9,1≤T≤50,1≤N≤30。
一道概率题。
这种最不走运能够走∞步,想用无穷级数,因为走法太恶心,所以行不通。
然而解决期望的另一种是DP设期望,然后得出方程。
将能量值排序。
设fx,y表示由状态{能量总和为x,最小能量环为第y小}到终点x′>T的期望天数
那么fx,y有p′的概率被吃掉一个环(p′=p(x>0) p′=0(x=0)),即有p′的概率由ffa+1转移来;有1−p′的概率往下走,也就是说有1−p′的概率由fai,i+1i转移过来。
即:
fx,y=p′(ffa+1)+1−p′y∑i=1yfx+ai,i+1
考虑递归,每个状态返回用ffa表示fx,y的方法,它是个一元一次多项式。
那么用fx,y表示fx+ai,i后,1−p′y∑yi=1fx+ai,i+1也可以用fx,y表示,设其为Afx,y+B
原式化为fx,y=p′ffa+p′+Afx,y+B解方程fx,y=p′1−Affa+p′+B1−A
这样就表示好了。
递归f(0,n),这时ffa=0
#include<cstring> #include<cstdio> #include<algorithm> #define db double using namespace std; int n,lim,v[40]; db p; struct fc{db a,b;}; fc operator+(fc a,fc b){return (fc){a.a+b.a,a.b+b.b};} fc operator+(fc a,db b){return (fc){a.a,a.b+b};} fc operator*(fc a,db b){return (fc){a.a*b,a.b*b};} fc P(int s,int x){ if(s>lim)return (fc){0,0}; fc ex=(fc){0,0};db _p=(s?1-p:1)/(db)x; for(int i=1;i<=x;i++)ex=ex+(P(s+v[i],i)+1)*_p; if(s){ db t=1-ex.a;return (fc){p/t,(ex.b+p)/t}; }return (fc){0,ex.b/(1-ex.a)}; } int main(){ freopen("flow.in","r",stdin); freopen("flow.out","w",stdout); while(~scanf("%lf %d %d",&p,&lim,&n)){ for(int i=1;i<=n;i++)scanf("%d",&v[i]);sort(v+1,v+n+1); printf("%.3lf\n",P(0,n).b); } fclose(stdin);fclose(stdout); return 0; }
相关文章推荐
- jzoj2754 【2012东莞市选】时间流逝 (概率,赌徒破产问题)
- bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
- JLOI2012:时间流逝
- 【JLOI 2012】时间流逝(期望,树上高斯消元)
- 【Codeforces Round 362 (Div 2)D】【树的遍历 概率均分思想】Puzzles 兄弟节点的等概率遍历下 树的遍历每点期望时间戳
- 一个完整的ID生成器,并极大地降低了并发重复的概率,转换成十六进制 时间戳
- VS 2012 C++程序将支持Windows XP (这篇文章害我浪费了一整天的时间查问题)
- C# Flowplayer(视频播放器)如何操作,使视频的时间进度不可操作
- 10th, Feb 2012 今日时间(第14天)
- SQLServer 2012 可视化窗口中,设置“时间”默认值为“当前时间"
- 时间在流逝
- 2012过年的时间 2012过年放假时间 2012年什么时间过年 2012过年 2012年什么时候过年
- 获取随机时间,且不同时间段的概率不等的计算方法
- 2012山东高考录取查询,山东高考录取时间
- BZOJ2878 NOI2012迷失游乐园(树形dp+环套树+概率期望)
- 2012蓝桥杯【初赛试题】 夺冠概率
- 排队论——随机时间概率
- 时间在流逝
- 流逝的时间
- 【2012-12】【概率&期望】ALfheim Online