ZLOJ练习23总结

written on 2022-06-24

期望与概率专场,打的很烂,这一专题还需要多加训练!

在分析之前,我想先重新申明一下期望的表示意义:某个量的期望,即等于该事件在平均情况下求得的这个量。 这是所有期望dp的基础,也是转移时,期望要除以方案数的根本原因。

另外,总结一下dp题的几个步骤。

  1. 模拟题意,找出决策点。

  2. 设计状态。

  3. 判断边界。

  4. 写出状态转移方程。

  5. code

先判断边界!

\(A\) 题传送门

题意里提到了概率,要求的问题是平均情况下的得分,也就是期望。接着我们来逐步分析一下期望的计算方法。

首先要模拟题意,对于这道题而言,对于一个物品,有三种可能的情况。

  1. 吃这个物品,当然这是在子集均已选过的前提下做出的决策。

  2. 想吃这个物品,但是没法吃。

  3. 直接不吃这个物品。

\(2,3\) 本质上是同一种决策,可以用相同的方法来进行转移。

因为题目要求最优,但是每一次决定决策是否最优是取决与未来的,所以,这里有两种方法,一种是逆推的动态规划,另一种是记忆化搜索,补题时采用的方法是记忆化搜索。当然这题的状态是很显然的,也就是一维记录时间戳,另一维状压记录已选物品。

因为此次的状态取决于未来,所以边界点在最后,那么可以先写出边界:
if(tim>k) return 0;(期望贡献为 \(0\)

考虑dp的本质,每一次决策,我们都可以假设子问题已经全部获解,那么:

  • \(f_{i,j}=\max(f_{i+1,j},f_{i+1,j|(1<<k)}+p_k\)(该物品可选的决策)

  • \(f_{i,j}=f_{i+1,j}\)(不能选该物品)

最后,注意期望的计算要除以转移过来的情况数!也就是除以物品个数 \(m\)。当然这个除可以用分配率在转移的时候直接除。


先看 \(C\) 题,题意

题面很长,分清英雄,三种血量的奴隶主,克苏恩三个角色。

同样的,首先模拟题意。对于一次攻击,有四种决策。

  1. 攻击英雄。

  2. 攻击1血奴隶主。

  3. 攻击2血奴隶主。

  4. 攻击3血奴隶主。

其中,后两种情况可能会使3血奴隶主个数加 \(1\)

明确了决策,我们就可以设计状态了,这里有两种可以直观想到的状态,一种是记录三种奴隶主的数量(1),攻击次数(2),第3维记录英雄血量,当然这个第三维可以直接当成记录内容然后略去,否则记录的内容应当是这一情况的概率。

补题时选择的是不记第 \(3\) 维。按照一开始提供的dp思路,我们先想一想它的边界。一般来说,要求全局的期望,我们可以先想定最末端,停止时刻期望的贡献,这也就是边界,然后倒推回来。这个思路和 \(A\) 题有异曲同工之妙,同样可以用记忆化搜索,这样更直观。\(Code\)


\(B\) 题传送门

个人感觉这题事实上是四道题中最难想的,这题的难点主要在于状态的设计。在思考这题时,我们必须跳出定式思维,也就是以绝对位置来分析这种问题。对于这种类似于约瑟夫问题的题目,一般采取的方法是以相对位置为状态进行dp转移。

那么对于这题,很明显的,一次摸牌(杀人环节)对应dp的一个阶段。我们可以设 \(f_{i,j}\) 表示还剩下 \(i\) 个人,从庄家数位置为 \(j\) 的人获胜的概率。如果是这样,那么再确定边界。很明显,有 \(f_{1,1}=1\)。然后考虑决策,有 \(m\) 种牌,对于每种摸牌的情况,我们可以画图来帮助转移,具体可以见这篇题解(感谢@Drinkkk大佬)。同样的,因为是概率的转移,所以相加后还要除以情况数 \(m\),这样才是对应的概率。


\(D\)题传送门

其实题意已经说得很清楚了,要求的是二进制编码的最小期望长度,这就是哈夫曼树的题意嘛!但是还是要注意审题,题目说的是“对 \(n\) 天所有 \(4^n\) 种可能的天气状况进行二进制编码”而不是“对每种天气进行编码”。正因此我比赛的时候没有写这题。

有一种很显然的暴力做法,也就是暴力枚举 \(4^n\) 种可能的天气状况,然后在枚举的同时计算出概率,塞入小根堆中跑哈夫曼树,最短的编码就是所有非叶子结点的概率和。

但是很显然这会超时,因此需要考虑优化。与 \(C\) 题有一些些类似,我们可以将相同的天气状况放到一起考虑。具体地,四重循环枚举每一种天气的数量,用乘法原理计算这种情况的概率,并用排列组合计算出这种情况的个数。最后再将这些情况(以结构体记录)塞入小根堆,然后模拟一下取的过程,就可以求出最小的期望编码长度了。Code(包括暴力与满分做法。)

posted @ 2022-07-31 21:55  Freshair_qprt  阅读(54)  评论(0编辑  收藏  举报