题目链接

这是一道传统的期望题,可是有一些套路值得我去掌握。

我们用$s$来表示一种状态,就是当前拥有的能量圈,是一个正整数拆分的形式。

用$f_{s}$表示如果遇到果冻鱼后丢掉了最小的能量圈后的状态,对于每一个$s$,$f_{s}$是唯一的。

用$v_{s}$表示随机得到了能量圈后的状态,假设目前还有$mi$种能量圈可选,那就有$mi$种转移。

由于$f_{s}$的能量圈个数一定小于$s$的能量圈个数,所以这是一个树形结构。

可以简单写出$s$的期望的方程式:

$E_{s} = 1 + p * E_{f_{s}} + (1 - p) * \frac{1}{mi} * \sum E_{v_{s}}$。

这里我们发现,当$s$的和大于阈值的时候,$E_{s} = 0$,也就是叶子的贡献和其父亲是没有关系的。

这里有一个套路,就是由于它是一个树,每一个$E_{s}$都可以表示成$k_{s} * E_{f_{s}} + b_{s}$的形式。

于是把上式中的$E_{v_{s}}$展开成$k_{v_{s}} * E_{s} + b_{v_{s}}$。

我们设$g = (1 - p) * \frac{1}{mi}, nk = \sum k_{v_{s}}, nb = \sum b_{v_{s}}$,移项可得:

$(1 - g * nk) * E_{s} = 1 + p * E_{f_{s}} + g * nb$

$E_{s} = \frac{p}{1 - g * nk} E_{f_{s}} + \frac{1 + g * nb}{1 - g * nk}$

所以得到$k_{s} = \frac{p}{1 - g * nk}, b_{s} = \frac{1 + g * nb}{1 - g * nk}$。

叶子的$k,b$都是$0$,于是我们只要从叶子向上推就可以了,能算出每个点的$k,b$,因为它只和儿子有关,而根是没有父亲的,答案就是根节点的$b$。

由于阈值不大,正整数拆分的形式不会太多,复杂度是合理的。

$\bigodot$技巧&套路:

  • 树上高斯消元的特殊性质
#include <cstdio>
#include <algorithm> using namespace std; int n, t, a[];
double p; struct No { double k, b; }; No Dfs(int s, int mi) {
No re = (No){ , };
if (s > t) return re;
double nk = , nb = ;
double np = s? p : , g = ( - np) / mi;
for (int i = ; i < mi; ++i) {
No so = Dfs(s + a[i], i + );
nk += so.k, nb += so.b;
}
re.k = np / ( - g * nk);
re.b = ( + g * nb) / ( - g * nk);
return re;
} int main() {
while (scanf("%lf%d%d", &p, &t, &n) == ) {
for (int i = ; i < n; ++i)
scanf("%d", &a[i]);
sort(a, a + n);
printf("%.3f\n", Dfs(, n).b);
}
return ;
}

【JLOI 2012】时间流逝(期望,树上高斯消元)的更多相关文章

  1. LOJ2542 PKUWC2018 随机游走 min-max容斥、树上高斯消元、高维前缀和、期望

    传送门 那么除了D1T3,PKUWC2018就更完了(斗地主这种全场0分的题怎么会做啊) 发现我们要求的是所有点中到达时间的最大值的期望,\(n\)又很小,考虑min-max容斥 那么我们要求从\(x ...

  2. LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt

    题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...

  3. bzoj 2784 [JLOI2012]时间流逝——树上高斯消元

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2784 一个状态可以加很多个能量圈,但减少能量圈的情况只有一种.所以可以用树来刻画. 然后就变 ...

  4. loj2542 「PKUWC2018」随机游走 MinMax 容斥+树上高斯消元+状压 DP

    题目传送门 https://loj.ac/problem/2542 题解 肯定一眼 MinMax 容斥吧. 然后问题就转化为,给定一个集合 \(S\),问期望情况下多少步可以走到 \(S\) 中的点. ...

  5. 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)

    题面传送门 一道挺综合的 hot tea,放到 PKUWC 的 D2T2 还挺喜闻乐见的( 首先我们考虑怎样对一个固定的集合 \(S\) 计算答案,注意到我们要求的是一个形如 \(E(\max(S)) ...

  6. BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元

    BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...

  7. NOI.AC省选模拟赛第一场 T1 (树上高斯消元)

    link 很容易对于每个点列出式子 \(f_{x,y}=(f_{x,y-1}+f_{x,y}+f_{x,y+1}+f_{x+1,y})/4\)(边角转移类似,略) 这个转移是相互依赖的就gg了 不过你 ...

  8. [JLOI2012]时间流逝 树上高斯消元 概率期望

    题面 题意:(感觉题面写的题意是错的?)有\(n\)种能量不同的圈,设当前拥有的圈的集合为\(S\),则: 1,每天有\(p\)概率失去一个能量最小的圈.特别的,如果\(S = \varnothing ...

  9. ZJUT 1423 地下迷宫(期望DP&高斯消元)

    地下迷宫 Time Limit:1000MS  Memory Limit:32768K Description: 由于山体滑坡,DK被困在了地下蜘蛛王国迷宫.为了抢在DH之前来到TFT,DK必须尽快走 ...

随机推荐

  1. 1.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——手册页

    我们运行的命令行程序,通常在技术上称作shell, 它包含了一个非常强大(也很神秘)的工具,我们将用它来学习更多可用的命令.这个工具本身就是个称作'man'的命令('manual'的简写).它的参数是 ...

  2. javaScript之jQuery框架

    一.jQuery简介   jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨 ...

  3. 20155234 Exp3 免杀原理与实践

    使用msf编码器生成jar包 使用指令:msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.157.141 lport=5234 x> ...

  4. EZ 2018 03 16 NOIP2018 模拟赛(四)

    链接:http://211.140.156.254:2333/contest/64 我去掉了一百多分! 这次的题目怎么说呢,特别水,但是就是出现了一些很逗的错误导致炸裂. 最好笑的是SB的不只我一个: ...

  5. mysql提示Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist解决方法

    一次重启mysql发现无法启动成功,通过检查mysql日志发现问题并解决了问题. mysql启动失败的日志: [root@nn ~]# tail -n 20 /var/log/mysqld.log 1 ...

  6. 架构师修炼 II - 表达思维与驾驭方法论

    开篇之前我想先说说当年开发的那点事儿:大约10年前吧,我还是一个程序员的时候经常都是遇到这样的项目开发流程: 解决方案 :满足客户目的和投标用的一堆文档(不少还是互联网上抄的) ,是以Word为主的纯 ...

  7. UE4中Timeline的使用

    UE4中经常需要一些和时间相联系的功能,例如在一段时间内完成一个动作,播放一段动画,或者只是单纯的延迟函数的执行时间,即调整事件的执行顺序.在UE4的蓝图自带函数中有一个很好用的函数可以完美地解决这些 ...

  8. 【大数据实战】将普通文本文件导入ElasticSearch

    以<刑法>文本.txt为例. 一.格式化数据 1,首先,ElasticSearch只能接收格式化的数据,所以,我们需要将文本文件转换为格式化的数据---json. 下图为未处理的文本文件. ...

  9. 【文章存档】如何通过 GitLab 进行持续部署

    好久没写博客了,这几天存档一下新文章. 链接 https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/a ...

  10. 01_python2.x和python3.x中range()的区别

    Py2.x 1) .range 和xrange都是经常使用的,特别是range()返回一个列表 2) .xrange()一般用来创建迭代对象 Py3.x xrange()不存在了,只有range()而 ...