HDU 4035 树上的期望

37 篇文章 0 订阅

pps:这个是我转的,此题做了好久完全没思绪。。。网上大牛解释太过简单。。。此大牛写了详细的推导过程。相当好。我自己推了大概两大张纸才搞出来。

一定要自己好好推,一步一步推过去。。。 对于有些地方我改了点

http://blog.163.com/fengjie1314126@126/blog/static/96609996201181423525697/

ps:只要你有信心把这篇文章看下来,这道题你肯定会!马尔可夫链应用。 



首先,我要简单介绍一下,马尔科夫链要求过程在时刻t0所处的状态为已知的情况下,t>t0所处的状态于过程子时刻t0之前的状态无关。(引自浙大版,我那本M.I.T版的书还了,囧)。即所谓无后效性,故马尔科夫链和所有的动态规划本质上是相通的。

我们回到这题:树有n点(记为v[1], v[2]...v[n],其中1为起始节点),n-1条边。
记K[i]为i节点的kill概率,E[i]为i节点的Exit概率.
记P[i][j]为点i到j的概率。则
P[i][0]== K[i],表示其有K[i]的几率被kill然后回到起点
M[x]为与x节点相邻的边数。
P[i][j](j!=0)== (1-K[i]-E[i])/M[i],
S[i]表示V[i]逃出所走管道数期望值。
则S[1]即为所求。
则S[i]只与和其相邻的节点有联系,这个联系是:
S[i] = sum(  (S[j]+1)*P[i][j]   |   j和i相邻) + K[i]*S[1]

到这儿,我们似乎可以直接做线性方程组了,但是原题n<=10000,伤不起。
进而我们考虑是不是可以从某些最基本的状态一步一步往上推,最后利用这些基本状态解某一个方程组呢?沿着这个想法,我们可以沿着树状动规的方向走一走。
A[L] = K[L],
B[L] = (1-K[L]-E[L]),
C[L] = (1-K[L]-E[L])
对于这颗树中的某个非叶节点L。则:
S[L] = sum(  (S[j]+1)*P[L][j]   |   j和L相邻) + K[L]*S[1] 
 = sum( (S[j]+1)*P[L][j]   |   j为L的子节点 ) + (S(F(L)) +1) * P[L][F(L)] + K[L]*S[1]
其中,P[L][j] = (1-K[L]-E[L])/m[L](j和L相邻),记该值为v
则S[L]= sum( (S[j]+1)*v  |  j为L的子节点 ) + (S(F(L)) +1) * v + K[L]*S[1]
以下记j是L的子节点为son(j,L)
= sum( S[j]*v  | son(j,L) ) + sum( v |  son(j,L) ) + S(F(L)) * v + v + K[L]*S[1]
= (M[L]-1)*v+v  + K[L]*S[1] + v*S(F(L)) + sum( S[j]*v  | son(j,L) 
因为F[j | son(j,L)] = L,则
sum( S[j]*v  | son(j,L))  = sum(A[j] * S[1] + B[j] * S(F(j)) + C[j] | sson(j,L))
sum(A[j] * S[1] + B[j] * S(L) + C[j] | son(j,L))
所以S[L] = M[L]*v + K[L]*S[1] + v*S(F(L)) + sum(A[j] * S[1] + B[j] * S(L) + C[j] | son(j,L))
= (1-K[L]-E[L]) + K[L]*S[1] + v*S(F(L)) + S[1]*sum(A[j]  son(j,L)) + S(L)*sum(B[j] son(j,L))+sum(C[j] | son(j,L))
(1- sum(B[j] son(j,L)) ) * S[L] = (sum(A[j]  son(j,L))+K[L])*S[1] +  v*S(F(L))+[(1-K[L]-E[L])+sum(C[j] | son(j,L)) ]
记u = (1- sum(B[j] son(j,L)) )
则对于S[L],
A[L] = (sum(A[j]  son(j,L))+K[L])
B[L] = v = (1-K[L]-E[L])/m[L]
C[L] = [(1-K[L]-E[L])+sum(C[j] | son(j,L)) ]

S【L】={A【L】*S【1】+v*S【F(L)】+C【L】}/(1-SUM【B【j】| son(j,L)】)
S[L] 只作为一个中间量

最终求得
S[1] = A[1] * S[1] + C[1],推得 S[1] = C[1]/1-A[1]
终!这就网上很多大牛代码真实含义。。。
代码就请去原站全看吧。。。把代码也转过来有点不太好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值