题意:中文题,按照题目要求的二叉树生成方式,问(1)叶平均深度 (2)树平均深度

解法:这道题看完题之后完全没头绪,无奈看题解果然不是我能想到的qwq。题解参考https://blog.csdn.net/Maxwei_wzj/article/details/82262755这位大佬的,这里讲下我的理解:

首先是第一问:第一问会简单一些,设f[i]代表叶节点为i的树的叶平均深度,那么因为是平均那么 i*f[i] 就是叶子总深度啦。在叶子深度x下拓展得到的新贡献是 2(x+1)-x=x+2  。那么就有 i*f[i]=(i-1)*f[i-1]+x+2  。这里的x是什么呢?x是叶子深度当然要是期望情况下的深度,那不就恰好是f[i]吗!!

那么得到  i*f[i]=(i-1)*f[i-1]+f[i-1]+2  化简得到  f[i]=f[i-1]+2/n 。第一问解决。

第二问思维难度会更大一些:令g[i][j]代表叶子数为i的树深度大于等于j的概率。

那么会得到状态转移方程:  g[i][j]=1/(i-1) * sigma(g[k][j-1]+g[i-k][j-1]) (k=1~i-1);

解释一下就是把i个叶子分给左右子树(当然左右都至少有一个叶子所以才是i-1种情况),然后加上根节点的深度要求左边的概率就是g[k][j-1],右边的概率就是g[i-k][j-1]。但是这样会加多了(因为g[i][j]是没有区分左右的所以直接加,左右都满足条件的会加了两次),所以要减去相乘的结果。

至于这个方程最重要的一点是为什么结果能除以i-1?这个结论需要证明,建议看上面大佬或者洛谷大佬的题解证明过程。结论就是:

代码如下:

 #include<bits/stdc++.h>
using namespace std;
const int N=+;
int q,n; double dp1[N]; //dp1[i]代表:i个结点的平均深度期望为dp1[i]
void solve1() {
dp1[]=;
for (int i=;i<=n;i++) dp1[i]=dp1[i-]+/(double)i;
printf("%.6lf\n",dp1[n]);
} double dp2[N][N]; //dp2[i][j]代表:i个结点树深度大于等于j的概率
void solve2() {
dp2[][]=;
for (int i=;i<=n;i++) {
dp2[i][]=;
for (int j=;j<=n;j++) {
for (int k=;k<i;k++)
dp2[i][j]+=dp2[k][j-]+dp2[i-k][j-]-dp2[k][j-]*dp2[i-k][j-];
dp2[i][j]/=(double)(i-);
}
}
double ans=;
for (int i=;i<n;i++) ans+=(dp2[n][i]-dp2[n][i+])*i;
printf("%.6lf\n",ans);
} int main()
{
cin>>q>>n;
if (q==) solve1();
else solve2();
return ;
}

最新文章

  1. JS 做时钟
  2. Redis Sentinel 高可用实现说明
  3. 使用File类列出指定位置的文件信息,包含该路径子目录下的文件信息
  4. cocos2dx 3.x (单选,多选,复选checkBox按钮的实现) RadioButton
  5. Java设计模式1——策略模式(Strategy Pattern)
  6. TTAS Lock C++11 实现
  7. Java简单类——双向一对多映射
  8. html5,导航
  9. Struts2 Convention插件的使用(2)return视图以及jsp的关系
  10. Servlet实例解说
  11. 前端面试题整理—React篇
  12. 使用Spring Cloud搭建服务注册中心
  13. CentOS7+CDH5.14.0安装全流程记录,图文详解全程实测-4配置NTP服务
  14. font-size:0的妙用,用于解决inline或者inline-block造成的间隙
  15. 十分钟搞定pandas
  16. jsp里面不能使用${pageContext.request.contextPath}解决方案
  17. 设计模式(15)--Interpreter(解释器模式)--行为型
  18. Ubuntu:如何显示系统托盘图标(systray)
  19. Could not write content: No serializer found for class and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
  20. JavaScript三大对象详细解说

热门文章

  1. 【leetcode】516. Longest Palindromic Subsequence
  2. Xcode出现报错,但是没有给出详细信息,可以看这里
  3. UE4 命令行打开工程
  4. LRU management
  5. delphi 神经网络 学习
  6. STM32 实现内部Flash的读写(HAL库版)
  7. 第 3 章 前端基础之JavaScript
  8. 2019Hdu多校第三场:1007 Find the answer(multiset 解法)
  9. 题解1433. 数码问题 (Standard IO)
  10. 关于 pip disreubution setuptools(unable to locate package pip)