洛谷P3830 [SHOI2012]随机树——概率期望
题目:https://www.luogu.org/problemnew/show/P3830
询问1:f[x]表示有x个叶节点的树的叶节点平均深度;
可以把被扩展的点的深度看做 f[x-1] ,于是两个新点深度为 f[x-1]+1,而剩下的x-2个点平均深度就是f[x-1];
所以f[x] = [ f[x-1] * (x-2) + (f[x-1] + 1) * 2 ] / x ;
整理得到f[x] = f[x-1] + 2 / x ;
询问2:f[i][j]表示有i个叶子节点、深度为j的概率;
把状态分成两个子状态,就是左子树和右子树,转移即可;
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int q,n;
double f[][],ans;//[叶子个数][深度] <[左子树叶子个数]>
void solve1()
{
for(int i=;i<=n;i++)
ans+=2.0/i;
printf("%.6lf\n",ans);
}
void solve2()
{
f[][]=;
f[][]=;
f[][]=;
for(int i=;i<=n;i++)//叶子个数
for(int j=;j<i;j++)//左子树叶子个数
for(int k=;k<j;k++)//左子树深度
for(int l=;l<i-j;l++)//右子树深度
f[i][max(k,l)+]+=f[j][k]*f[i-j][l]/(i-);
for(int i=;i<=n;++i)ans+=i*f[n][i];
printf("%.6lf\n",ans);
}
int main()
{
scanf("%d%d",&q,&n);
if(q==)solve1();
if(q==)solve2();
return ;
}
洛谷P3830 [SHOI2012]随机树——概率期望的更多相关文章
- 洛谷P3830 [SHOI2012]随机树(期望dp)
		
题面 luogu 题解 第一问: 设\(f[i]\)表示\(i\)步操作后,平均深度期望 \(f[i] = \frac {f[i - 1] * (i - 1)+f[i-1]+2}{i}=f[i-1]+ ...
 - 洛谷 P3830 [SHOI2012]随机树
		
https://www.luogu.org/problemnew/show/P3830 具体方法见代码.. 其实挺神奇的,概率可以先算出“前缀和”(A小于等于xxx的概率),然后再“差分”得到A恰好为 ...
 - 洛谷3830 [SHOI2012]随机树   【概率dp】
		
题目 输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结 ...
 - P3830 [SHOI2012]随机树 题解
		
P3830 随机树 坑题,别人的题解我看了一个下午没一个看得懂的,我还是太弱了. 题目链接 P3830 [SHOI2012]随机树 题目描述 输入输出格式 输入格式: 输入仅有一行,包含两个正整数 q ...
 - 【BZOJ2830/洛谷3830】随机树(动态规划)
		
[BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度 ...
 - P3830 [SHOI2012]随机树
		
P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1) ...
 - luogu P3830 [SHOI2012]随机树 期望 dp
		
LINK:随机树 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度. 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的. \(f[i]=(f[i-1]\c ...
 - luogu P3830 [SHOI2012]随机树
		
输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均 ...
 - 洛谷P5437/5442 约定(概率期望,拉格朗日插值,自然数幂)
		
题目大意:$n$ 个点的完全图,点 $i$ 和点 $j$ 的边权为 $(i+j)^k$.随机一个生成树,问这个生成树边权和的期望对 $998244353$ 取模的值. 对于P5437:$1\le n\ ...
 
随机推荐
- Info.plist 的字段解释
			
bundle字段 这些字段名都是XML中的名称,在xcode的属性编辑器中,名字并不相同 bundle目录中的属性列表详细描述了有关该bundle的信息.Finder和一些系统API在一些情况下会使用 ...
 - 高级算法设计讲义 Lecture Notes for Advanced Algorithm Design
			
(Last modification: 2012-12-17) Textbooks: (1) David Williamson, David Shmoys. The Design of Approxi ...
 - iOS开发之计算两个日期的时间间隔
			
//首先创建格式化对象 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDate ...
 - 区间DP与贪心算法的联系(uav Cutting Sticks && poj Fence Repair(堆的手工实现))
			
由于,这两题有着似乎一样的解法所以将其放在一起总结比較,以达到更好的区分二者的差别所在. 一.区间DP uva的Cutting Sticks是一道典型的模板题. 题目描写叙述: 有一根长度为l的木棍, ...
 - zoj How Many Shortest Path
			
How Many Shortest Path 题目: 给出一张图,求解最短路有几条.处理特别BT.还有就是要特别处理map[i][i] = 0,数据有不等于0的情况! 竟然脑残到了些错floyd! ! ...
 - react 创建组件 (四)Stateless Functional Component
			
上面我们提到的创建组件的方式,都是用来创建包含状态和用户交互的复杂组件,当组件本身只是用来展示,所有数据都是通过props传入的时候,我们便可以使用Stateless Functional Compo ...
 - 安卓自带下拉刷新SwipeRefreshLayout加入上拉刷新功能
			
在项目里面要用到刷新库.曾经都是使用第三方的.只是看到官方出了  SwipeRefreshLayout之后就用SwipeRefreshLayout.可是不知道什么原因官方SwipeRefreshL ...
 - 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数
			
// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...
 - MySql 查询一周内记录
			
本周内:select * from wap_content where week(created_at) = week(now) 查询一天:select * from table where to_d ...
 - 李洪强iOS开发之 - block的使用
			
李洪强iOS开发之 - block的使用 01 - 定义block //支付block typedef void(^invokePayBlock)(CFBaseOrderModel *model ...