日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

luogu3830 [SHOI2012]随机树

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 luogu3830 [SHOI2012]随机树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門:洛谷

題目大意:對于一個只有一個節點的二叉樹,一次操作隨機將這棵樹的葉節點的下方增加兩個節點。$n-1$次操作后變為$n$個葉節點的二叉樹。求:(1)葉節點平均深度的期望值(2)樹深度的數學期望值

數據范圍:$2\leq n\leq 100$


首先看第(1)問

設$f_i$為$i$個葉節點的二叉樹的葉節點平均深度的期望值。

每次選擇一個葉節點,擴展出兩個新的葉節點,所以總的深度增加$f_{i-1}+2$

則$f_i=\frac{(i-1)*f_{i-1}+f_{i-1}+2}{i}=f_{i-1}+\frac{2}{i}$

所以

$$Ans=\sum_{i=2}^n\frac{2}{i}$$


然后是第(2)問,這個難度要稍微大一點。

我們發現這求的是$n$個數的最大值的期望,而第(1)問的是和的期望,而期望可加,卻不能$\max$,就非常不好辦了。

這時我們就需要用一個式子

$$E[X]=\sum_{i=1}^{n-1}P(X\geq i)$$

然后就可以轉化為其中一個數$\geq i$的概率。

就很容易想到$dp[i][j]$表示$i$個葉節點的二叉樹中深度$\geq j$,則左子樹深度$\geq j-1$或右子樹深度$\geq j-1$

所以

$$dp[i][j]=\frac{\sum_{k=1}^{i-1}(dp[k][j-1]+dp[i-k][j-1]-dp[k][j-1]*dp[i-k][j-1])}{i-1}$$

$$Ans=\sum_{i=1}^{n-1}dp[n][i]$$

然后就做完了。

1 #include<cstdio> 2 #define Rint register int 3 using namespace std; 4 const int N = 103; 5 int q, n; 6 double dp[N][N], ans; 7 int main(){ 8 scanf("%d%d", &q, &n); 9 if(q == 1) 10 for(Rint i = 2;i <= n;i ++) ans += 2.0 / i; 11 else { 12 for(Rint i = 1;i <= n;i ++) dp[i][0] = 1; 13 for(Rint i = 2;i <= n;i ++){ 14 for(Rint j = 1;j < n;j ++){ 15 for(Rint k = 1;k < i;k ++) 16 dp[i][j] += dp[k][j - 1] + dp[i - k][j - 1] - dp[k][j - 1] * dp[i - k][j - 1]; 17 dp[i][j] /= i - 1; 18 } 19 } 20 for(Rint i = 1;i < n;i ++) ans += dp[n][i]; 21 } 22 printf("%.6f", ans); 23 } Luogu3830

?

轉載于:https://www.cnblogs.com/AThousandMoons/p/10595583.html

總結

以上是生活随笔為你收集整理的luogu3830 [SHOI2012]随机树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。