luogu P3830 [SHOI2012]随机树
2024-08-25 06:38:50
输入格式
输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数。
输出格式
输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位。如果 q = 1,则 d 表示叶结点平均深度的数学期望值;如果 q = 2,则 d 表示树深度的数学期望值。
p=1
令f(x)表示有x个叶子节点的树的叶子节点平均深度,则
f(x)*x 为叶子节点深度之和
f(x)+2随机选择一个叶子节点展开后增加的深度
f(x)= ((x-1)f(x-1)+f(x-1)+2)/x = (xf(x) +2)/x = f(x) + 2/x
p=2:
设f[i][j]表示当一颗树有i个叶子节点,且深度大于等于j时的概率; 设p[i][j]表示当一颗树有i个叶子节点,且深度等于jj时的概率;
则有f[i][j]=p[i][j]+p[i][j+1]+⋯+p[i][n−1]
f[n][1]=\(\sum_{i=1}^{n-1}\)p[n][i]
f[n][2]=\(\sum_{i=2}^{n-1}\)p[n][i]
f[n][3]=\(\sum_{i=3}^{n-1}\)p[n][i]
.
.
.
f[n][n-1]=p[n][n-1]
\(\sum_{i=1}^{n-1}\)f[n][i]=\(\sum_{i=1}^{n-1}\)p[n][i]*i
\(\sum_{i=1}^{n-1}\)f[n][i] 即为所求
#include<cstdio>
#include<iostream>
using namespace std;
#define int long long
#define db double
int p,n;
db f[110],dp[110][110],ans;
inline void work(){
for(int i=1;i<=n;i++)dp[i][0]=1;
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++){
for(int k=1;k<i;k++)
dp[i][j]+=dp[k][j-1]+dp[i-k][j-1]-dp[k][j-1]*dp[i-k][j-1];
dp[i][j]/=(i-1);
}
for(int i=1;i<n;i++)ans+=dp[n][i];
printf("%.6f\n",ans);
}
signed main(){
cin>>p>>n;
if(p==1){
f[1]=0;for(int i=2;i<=n;i++)f[i]=f[i-1]+2.0/i;
printf("%.6f\n",f[n]);
}else work();
}
最新文章
- AOPR弹出Order Now窗口怎么办
- Latex 数学符号表
- 一个有趣的模拟光照的shader(类似法线贴图)
- 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
- 两个不同于LR和jmeter的性能测试工具
- 【DataStructure In Python】Python模拟栈和队列
- 利用html+ashx实现aspx的功能
- Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点
- 第三方浏览器内核嵌入一、Crosswalk
- [POJ] 1562 Oil Deposits (DFS)
- SpringBoot启动流程解析
- 《Java 程序设计》第一周学习总结
- 解决Chunkize warning while installing gensim问题
- Codeforces 798D Mike and distribution - 贪心
- Docker镜像相关
- 多项式函数插值:多项式形式函数求值的Horner嵌套算法
- CoderForce 141C-Queue (贪心+构造)
- AutoFac在项目中应用的体会
- Android studio--几个生成文件的区别:Make Project、Make Module、Build apk、Signed apk
- Python3 urllib 爬取 花瓣网图片