poj 2057 樹形DP,數學期望

2022-04-01 07:18:17 字數 1484 閱讀 2755

題意:有乙隻蝸牛爬上樹睡著之後從樹上掉下來,發現後面的"房子"卻丟在了樹上面, 現在這只蝸牛要求尋找它的房子,它又得從樹根開始爬起,現在要求一條路徑使得其找到房子

所要爬行的期望距離最小. 爬行距離如下計算, 題目規定每乙個分支和枝末都看做是乙個節點, 這些節點之間的距離都是1, 在分支上可能會有熱心的毛毛蟲, 這些毛毛蟲會如實的告訴蝸牛他之前是否經過這條路徑, 也正是因為毛毛蟲, 因此詢問毛毛蟲的順序使得這題的期望是不同的. 輸入資料時給定的乙個鄰接關係,通過上乙個節點來構圖 ;同時字元 'y'表示該點有毛毛蟲, 字元'n'表示該點

分析:die[i]表示以 i 為根結點找不到房子時要爬行的最少距離。

當 i 沒有毛毛蟲的時候

j 是 i 的子節點。

當 i 有毛毛蟲的時候

;win[i]表示以 i 為根結點時,選好所有分支後,列舉完所有房子落在所有葉子結點的時候,要爬的最短距離。

就是說:當我走到 j 而找到時,前面的都失敗了。而 j 成功了。j 子樹 又有很多葉子結點。其中只有乙個是成功的(並不知道是哪個)。

如圖:

然後就是對於 i 結點來說,怎麼訪問才使得重複結點最少。

那就是

1 #include 2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;89

const

int maxn = 1010;10

intpos[maxn];

11int

snode[maxn];

12int

die[maxn];

13int

win[maxn];

14int

n;15

16 vectorvec[maxn];

1718

void

init()

1930

31for(int i=1;i<=n;i++) 37}

3839

int cmp(int a,int

b) 42

43void dfs(int

x) 54

for(int i=0;i)

5859

int tmp[10

];60

for(int i=0;i)

6364

int sum = 0

;65 sort(tmp,tmp+len,cmp);

66for(int i=0;i)

7071}72

73int

main()

7482

return0;

83 }

view code

P4316 數學期望 DP

題意 傳送門 p4316 綠豆蛙的歸宿 題解設 f if i fi 為從節點 i ii 走到終點所經過的路徑總長度期望,設節點 i ii 的出度為 deg ideg i degi 那麼有 f i 1deg i e i,j e w ij f j f i frac sum limits w f j fi...

小Y的塗鴉 數學期望 dp

題意概述 現在給出乙個n n的方格紙,有m個格仔已經被塗黑了。現在小明也來塗格仔,每次等概率地塗格仔 包括已經被塗過的 問期望的塗格仔次數,使得方格紙每一行每一列都至少有乙個格仔被塗過。資料範圍 1 n 2 103,0 m min n 2,2 103 1 ri ci n 這是給出的塗過的格仔的座標 ...

HDU3853 LOOPS 概率DP數學期望

題目大意 給出乙個n m的矩陣,要求從左上角走到右下角,每次移動消耗兩點能量,並且每次的移動方向是有概率的 回到自身,往右或者往下 輸入的矩陣中的每個位置有三個數,分別表示回到自身 向右移動 向下移動的概率,三者概率和為1,要求輸出從左上角走到右下角需要消耗的能量值的期望。測試資料可能有點問題,會出...