luoguP3830 [SHOI2012]随机树 期望概率 + 动态规划 + 结论
题意非常的复杂,考虑转化一下:
每次选择一个叶节点,删除本叶节点(深度为$dep$)的同时,加入两个深度为$dep + 1$的叶节点,重复$n$轮
首先考虑第$1$问,(你看我这种人相信数据绝对是最大的数据,直接$f[i][S]$表示$i$个叶子结点,深度之和为$j$的时候的概率,然后化前缀和化出来...)
对于一个深度为$x$的点,对它操作后,深度增加了$2 * (x+ 1) - x = x +2$
现在考虑平均的情况,令$f[i]$表示$i$个节点的平均深度,那么$f[i] = \frac{f[i - 1] *(i - 1) + f[i - 1] + 2}{i} = f[i - 1] + \frac{2}{i}$
其中,$f[i - 1] * (i - 1)$表示原来的总深度,$ / i$表示新的平均个数
边界为$f[1] = 0$(注意题目中深度的定义)
接着是第$2$问,考虑求解$f[i][j]$表示$i$个叶节点的树,深度为$j$的概率
那么$E(X) = \sum\limits_{i = 0}^n i * f[n][i]$
只要考虑怎么转移,自然地想到全概率公式,有
$f[i][j] = \sum\limits_{L = 1}^{i - 1} p[i][L] \sum\limits_{x = 1}^j \sum\limits_{y = 1}^j f[L][x] * f[i - L][y](x = j - 1 || y = j - 1)$
其中,$p[i][L]$表示$i$个叶子结点的树,有$L$个叶子结点落在左边的概率
同时, 注意右子树至少有$1$个叶子结点
那么,这是一个$O(n^4)$的算法
考虑进行优化,令$g[i][j] = \sum\limits_{i = 1}^j f[i][j]$
那么,现在我们的转移式变为了$f[i][j] = \sum\limits_{L = 1}^{i - 1} p[i][L] * (2 *f[L][j - 1] * g[i - L][j - 1] - f[L][j - 1] * f[i - L][j - 1])$
现在,只要求出$p[i][L]$,我们就得到了一个$O(n ^ 3)$的算法
而我们可以使用数学归纳法证明(不难)
$p[i][L] = \frac{1}{i - 1} (1 \leq L \leq i - 1)$
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; #define ri register int
#define de double
#define sid 105 int q, n;
de ans, f[sid][sid], g[sid][sid]; int main() {
cin >> q >> n;
if(q == ) {
for(ri i = ; i <= n; i ++) ans += 2.0 / i;
printf("%lf\n", ans);
}
else {
f[][] = ;
for(ri i = ; i <= n; i ++) g[][i] = f[][];
for(ri i = ; i <= n; i ++) {
for(ri s = ; s < i; s ++)
for(ri L = ; L < i; L ++)
f[i][s + ] += ( * f[L][s] * g[i - L][s] - f[L][s] * f[i - L][s]) / (i - );
g[i][] = f[i][];
for(ri s = ; s <= n; s ++) g[i][s] = g[i][s - ] + f[i][s];
}
for(ri i = ; i <= n; i ++) ans += i * f[n][i];
printf("%lf\n", ans);
}
return ;
}
实际上,由于是对$E[X] = \sum\limits_{i = 1}^n i *P(X = i)$进行计数
因此,我们可以把$P(x = i)$拆成$i$份
那么,对$E[X] = \sum\limits_{i = 1}^n P(X \geq i)$计数也是可以的
然而本质没有什么改变...
luoguP3830 [SHOI2012]随机树 期望概率 + 动态规划 + 结论的更多相关文章
- luogu P3830 [SHOI2012]随机树 期望 dp
LINK:随机树 非常经典的期望dp. 考虑第一问:设f[i]表示前i个叶子节点的期望平均深度. 因为期望具有线性性 所以可以由每个叶子节点的期望平均深度得到总体的. \(f[i]=(f[i-1]\c ...
- [SHOI2012]随机树[期望dp]
题意 初始 \(1\) 个节点,每次选定一个叶子节点并加入两个儿子直到叶子总数为 \(n\),问叶子节点深度和的平均值的期望以及最大叶子深度的期望. \(n\leq 100\) . 分析 对于第一问, ...
- 洛谷P3830 [SHOI2012]随机树(期望dp)
题面 luogu 题解 第一问: 设\(f[i]\)表示\(i\)步操作后,平均深度期望 \(f[i] = \frac {f[i - 1] * (i - 1)+f[i-1]+2}{i}=f[i-1]+ ...
- 洛谷3830 [SHOI2012]随机树 【概率dp】
题目 输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结 ...
- P3830 [SHOI2012]随机树 题解
P3830 随机树 坑题,别人的题解我看了一个下午没一个看得懂的,我还是太弱了. 题目链接 P3830 [SHOI2012]随机树 题目描述 输入输出格式 输入格式: 输入仅有一行,包含两个正整数 q ...
- [SHOI2012]随机树
[SHOI2012]随机树 题目大意( 网址戳我! ) 随机树是一颗完全二叉树,初始状态下只有一个节点. 随机树的生成如下:每次随机选择一个叶子节点,扩展出两个儿子. 现在给定一个正整数\(n\)(\ ...
- P3830 [SHOI2012]随机树
P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1) ...
- bzoj2830: [Shoi2012]随机树
题目链接 bzoj2830: [Shoi2012]随机树 题解 q1好做 设f[n]为扩展n次后的平均深度 那么\(f[n] = \frac{f[n - 1] * (n - 1) + f[n - 1] ...
- 【NOIP模拟赛】黑红树 期望概率dp
这是一道比较水的期望概率dp但是考场想歪了.......我们可以发现奇数一定是不能掉下来的,因为若奇数掉下来那么上一次偶数一定不会好好待着,那么我们考虑,一个点掉下来一定是有h/2-1个红(黑),h/ ...
随机推荐
- 用Matlab实现字符串分割(split)
用Matlab实现字符串分割(split)Posted on 2011/08/08 Matlab的字符串处理没有C#强大,本身又没有提供OO特性,需要依赖别的手段完成这项任务. 我们在这里借助正则表达 ...
- uoj311 【UNR #2】积劳成疾
传送门:http://uoj.ac/problem/311 [题解] 这题的期望dp好神奇啊(可能是我太菜了) 由于每个位置都完全一样,所以我们设$f_{i,j}$表示审了连续$i$个位置,最大值不超 ...
- JavaScript设置粘贴板
设置复制 document.body.oncopy = function(){ alert('不许复制'); return false; }; 设置粘贴 document.getElementById ...
- 使用JSON Web Token设计单点登录系统
用户认证八步走 所谓用户认证(Authentication),就是让用户登录,并且在接下来的一段时间内让用户访问网站时可以使用其账户,而不需要再次登录的机制. 小知识:可别把用户认证和用户授权(Aut ...
- https://segmentfault.com/bookmark/1230000008276077
https://segmentfault.com/bookmark/1230000008276077
- DataFrame衍生新特征操作
1.DataFrame中某一列的值衍生为新的特征 #将LBL1特征的值衍生为one-hot形式的新特征 piao=df_train_log.LBL1.value_counts().index #先构造 ...
- C# 获取mp3文件的歌曲时间长度
添加命名空间: using Shell32; using System.Text.RegularExpressions;添加引用:COM组件的Microsoft Shell Control ...
- Machine Learning系列--维特比算法
维特比算法(Viterbi algorithm)是在一个用途非常广的算法,本科学通信的时候已经听过这个算法,最近在看 HMM(Hidden Markov model) 的时候也看到了这个算法.于是决定 ...
- Guava cache功能简介(转)
原文链接:http://ifeve.com/google-guava-cachesexplained/ 范例 LoadingCache<Key, Graph> graphs = Cache ...
- centos 下单独安装mysql
https://www.cnblogs.com/running-mydream/p/4666094.html https://www.cnblogs.com/lzj0218/p/5724446.htm ...