hdu4035 樹上概率dp

2021-06-22 18:40:53 字數 1791 閱讀 7502

從葉子到根,帶入公式求引數

/***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,倒著推。對於...