從葉子到根,帶入公式求引數
/***kuangbin
hdu 4035
dp求期望的題。
題意:有n個房間,由n-1條隧道連通起來,實際上就形成了一棵樹,
從結點1出發,開始走,在每個結點i都有3種可能:
1.被殺死,回到結點1處(概率為ki)
2.找到出口,走出迷宮 (概率為ei)
3.和該點相連有m條邊,隨機走一條
求:走出迷宮所要走的邊數的期望值。
設 e[i]表示在結點i處,要走出迷宮所要走的邊數的期望。e[1]即為所求。
葉子結點:
e[i] = ki*e[1] + ei*0 + (1-ki-ei)*(e[father[i]] + 1);
= ki*e[1] + (1-ki-ei)*e[father[i]] + (1-ki-ei);
非葉子結點:(m為與結點相連的邊數)
e[i] = ki*e[1] + ei*0 + (1-ki-ei)/m*( e[father[i]]+1 + ∑( e[child[i]]+1 ) );
= ki*e[1] + (1-ki-ei)/m*e[father[i]] + (1-ki-ei)/m*∑(e[child[i]]) + (1-ki-ei);
設對每個結點:e[i] = ai*e[1] + bi*e[father[i]] + ci;
對於非葉子結點i,設j為i的孩子結點,則
∑(e[child[i]]) = ∑e[j]
= ∑(aj*e[1] + bj*e[father[j]] + cj)
= ∑(aj*e[1] + bj*e[i] + cj)
帶入上面的式子得
(1 - (1-ki-ei)/m*∑bj)*e[i] = (ki+(1-ki-ei)/m*∑aj)*e[1] + (1-ki-ei)/m*e[father[i]] + (1-ki-ei) + (1-ki-ei)/m*∑cj;
由此可得
ai = (ki+(1-ki-ei)/m*∑aj) / (1 - (1-ki-ei)/m*∑bj);
bi = (1-ki-ei)/m / (1 - (1-ki-ei)/m*∑bj);
ci = ( (1-ki-ei)+(1-ki-ei)/m*∑cj ) / (1 - (1-ki-ei)/m*∑bj);
對於葉子結點
ai = ki;
bi = 1 - ki - ei;
ci = 1 - ki - ei;
從葉子結點開始,直到算出 a1,b1,c1;
e[1] = a1*e[1] + b1*0 + c1;
所以e[1] = c1 / (1 - a1);
若 a1趨近於1則無解...
*/#include#include#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define maxnode 1000010
#define sigma_size 26
const int dir[4][2]=;
int n;
vectorpq[10005];
struct dian
dians[10005];
void dfs(int temp,int father)
double sa=0,sb=0,sc=0,****;
int m=0;
for(int i=0;i
hdu 4035 經典概率dp求期望
求期望要用到全期望公式來來分類討論 k i 表示死掉回到1的概率 e i 表示成功逃走的概率 那麼我們設定隨機變數 在節點i處開始,逃走所走的邊數 那麼e i 就是從節點i開始,要逃走的邊數的期望 如果i是葉子節點 e i k i e 1 e i 0 1 k i e i e parent i 1 1...
HDU 4035 Maze 樹形概率DP
題意 一棵樹,從結點1出發,在每個結點 i 都有3種可能 1 回到結點1 概率 ki 2 結束,概率 ei 3 隨機走一條邊。ki ei 隨機走 1 求到結束需要走的邊數的期望。假設e i 為點i到結束走邊數的期望,則有 以下m為點的度數 e i ki e 1 1 ei ki m e fa i 1 ...
hdu 4035 Maze (概率與期望DP)
題目描述 一棵樹,乙個人初始在1號點。每次到達乙個點,有ki的概率被殺死,並且回到1號點,有ei的概率直接逃離,然後等概率的逃到與他相鄰的節點 1 ki ei du i 每次移動步數 1。求逃出去的期望步數。這道題與上面題的思想和方法是類似的。我們先假設逃離是到達節點0,那麼e 0 0,倒著推。對於...