原题链接1885 - 膜法师 lanpang 的树学期望 - acm.bjtu
简单的dp题,根据原文描述,新增的节点会与原先的树中随机一个节点连接,若n个节点时数学期望为x,n+1个节点时,选择原先树上的随机两点的概率为,平均经过的节点数仍为x,一个点选择新加入的点,另一个点选择原先树上的点的概率为,由于新节点接在随机一个原节点上,平均经过的节点数为x+1,两个点都选择新加入的点的概率为,经过的节点数为1
算法复杂度为o(n)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
double dp[200000];
dp[0]=1;
int i=1;
while(i<200000)
{
dp[i]=((double)i*(double)i*dp[i-1]+2*(double)i*(dp[i-1]+1)+1)/(double)(i+1)/(double)(i+1);
i++;
}
int n,x;
scanf("%d",&n);
i=0;
while(i<n)
{
scanf("%d",&x);
printf("%lf\n",dp[x-1]);
i++;
}
return 0;
}