ZOJ3329

来源:互联网 发布:黑帽seo免杀jsp大马 编辑:程序博客网 时间:2024/05/17 21:41

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754

题目大意:三个骰子,分别有k1,k2,k3个面,如果三个骰子分别扔到a,b,c时分数置零,否则将分数加上a+b+c,当总分超过n时游戏停止,问游戏进行次数期望(初始分数为0)

难点:通过假设方程式消去f[0]以外的位

题目做法:

首先明确f[i]=sum(p[k]*f[i+k])+f[0]*p[0]+1(p[k]指分数扔出k分的概率,f[i]为在得到i分后完成游戏的期望次数)    (1)

然后假设f[i]=a[i]*f[0]+b[i]      (2)

(2)代入(1)得

f[i]=(sum(p[k]*a[i+k])+p[0])*f[0]+sum(p[k]*b[i+k])+1   (3)

(2)代入(3)得

a[i]=sum(p[k]*a[i+k])+p[0]

b[i]=sum(p[k]*a[i+k])+1

当i=0时,可以得到(2)式如下

f[0]=a[0]*f[0]+b[0]即f[0]=b[0]/(1-a[0])

于是我们直接计算a[0]、b[0]就可以了

代码如下:

var p:array[0..200]of extended;    a,b:array[0..1000]of extended;    n,i,j,k,t,k1,k2,k3,x,y,z:longint;procedure main;begin  fillchar(p,sizeof(p),0);  p[0]:=1/(k1*k2*k3);  for i:=1 to k1 do    for j:=1 to k2 do      for k:=1 to k3 do      if (i<>x)or(j<>y)or(k<>z) then      p[i+j+k]:=p[i+j+k]+p[0];  fillchar(a,sizeof(a),0);  fillchar(b,sizeof(b),0);  for i:=n downto 0 do  begin    a[i]:=p[0];    b[i]:=1;    for j:=1 to k1+k2+k3 do    begin      a[i]:=a[i]+p[j]*a[i+j];      b[i]:=b[i]+p[j]*b[i+j];    end;  end;  writeln(b[0]/(1-a[0]):0:15);end;begin  readln(t);  while t>0 do  begin    readln(n,k1,k2,k3,x,y,z);    main;    dec(t);  end;end.




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学信网手机号忘了怎么办 注销手机号了学信网怎么办 学信网手机换了怎么办 学籍不在籍结业怎么办 电教馆的幼师证怎么办 中考不够建档线怎么办 医保漏交一年怎么办 南通图书馆怎么办饭卡 工商银行卡坏了怎么办 北京一卡通丢了怎么办 甲状腺右叶结节怎么办 ca证书掉了怎么办 地税ca丢了怎么办 南京乘车卡丢失怎么办 老干妈瓶盖打不开怎么办 金陵图书馆书丢失怎么办 幼师资格证丢了怎么办 双证毕业没有怎么办 幼师面试没特长怎么办 资格证到6年没换怎么办 中央巡视组走了怎么办 校园招聘学生违约怎么办 应届毕业生考上公务员档案怎么办 移动硬盘弹不出来怎么办 录音笔电池坏了怎么办 上不吃大厕怎么办 跨考研究生面试怎么办 手机信息查重怎么办 闲鱼不予申诉怎么办 广东理工职业学院没选到课怎么办 淘宝开店认证后怎么办 手机微信解冻怎么办 微信永久封号怎么办 拒绝微信登录怎么办 微信支付冻结怎么办 微信被冻结了钱怎么办 爱剪辑视频卡顿怎么办 优慕课密码忘了怎么办 高考填空题雷同怎么办 佳能600d模糊怎么办 教师面试没过怎么办