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/ ...
随机推荐
- HDU 2044 Coins
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行.请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数. 其中,蜂房的结构如下所示. Input输入数据的第一行是一个整数N,表示测试实例的个数,然 ...
- 【洛谷 P2553】 [AHOI2001]多项式乘法(FFT)
题目链接 简单处理一下输入,\(fft\)模板题. #include <cstdio> #include <cmath> #include <algorithm> ...
- 【洛谷 P3199】 [HNOI2009]最小圈(分数规划,Spfa)
题目链接 一开始不理解为什么不能直接用\(Tarjan\)跑出换直接求出最小值,然后想到了"简单环",恍然大悟. 二分答案,把所有边都减去\(mid\),判是否存在负环,存在就\( ...
- java中的matches -> 完全匹配
matches是完全匹配.跟matcher不一样, matcher像perl正则, 能匹配到符合的都会返回true, 而这个matches要完全一模一样才行. import java.util.reg ...
- Linux内核中的队列 kfifo【转】
转自:http://airekans.github.io/c/2015/10/12/linux-kernel-data-structure-kfifo#api 在内核中经常会有需要用到队列来传递数据的 ...
- (转)USB的描述符及各种描述符之间的依赖关系
全文链接:http://justmei.blog.163.com/blog/static/11609985320102421659260/?latestBlog 1 推荐 [原创] USB入门系列之七 ...
- C/C++——C语言数组名与指针
版权声明:原创文章,转载请注明出处. 1. 一维数组名与指针 对于一维数组来说,数组名就是指向该数组首地址的指针,对于: ]; array就是该数组的首地址,如果我们想定义一个指向该数组的指针,我们可 ...
- js获取系统时间
//------------------------------------获取系统日期时间 var oDate=new Date(); //alert(oDate.getFullYear());// ...
- netty 基础知识
http://my.oschina.net/bieber/blog/406799 线程模型 http://hongweiyi.com/2014/01/netty-4-x-thread-model/ h ...
- springboot1.5.4 idea 自动保存编译更新
maven dependencies增加 <dependency> <groupId>org.springframework.boot</groupId> < ...