題意:有乙隻蝸牛爬上樹睡著之後從樹上掉下來,發現後面的"房子"卻丟在了樹上面, 現在這只蝸牛要求尋找它的房子,它又得從樹根開始爬起,現在要求一條路徑使得其找到房子
所要爬行的期望距離最小. 爬行距離如下計算, 題目規定每乙個分支和枝末都看做是乙個節點, 這些節點之間的距離都是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 6view code7using
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 }
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,要求輸出從左上角走到右下角需要消耗的能量值的期望。測試資料可能有點問題,會出...