期望概率 dp
-
期望就要倒推,因为如果是正推可能还要记录概率,而且感觉不正确
-
设
表示此时是第 节课,换了几次,这次换不换 -
预处理出两个点之间的最短路就可以了
- 可以先手动算一下,在第 7 位时能够组成的概率和在第 8 位是一样的,那么大胆猜结论,在每个位置的概率都是一样的,然后就没了
-
对于每个人,假设当前能取的值为
,那么它期望取到 -
那么这个题目答案就是
- 设
为已经取完 个,取完剩下的期望次数
-
但是期望的钱和期望步数不是直接挂钩的
-
设
表示相应需要的钱
- 和上题一样,答案就是
-
一个朴素的思路就是求出每个牌作贡献的概率
-
那么问题就转换成了求一个牌
轮后会发动过的概率 -
考虑第一个牌,发动的概率:
-
但是对于后面的牌来说,有一个很恶心的点在于如果前面发动了一个牌,那么就直接结束这一轮了
-
那么我们表示出一个牌在哪些轮是会被考虑到的
-
设
表示所有游戏完了后前 个牌中出了 个的概率 -
-
那么我们就是要求
-
考虑枚举
是否有贡献来转移就可以了
-
神题
-
首先有个性质:确定了所有灯的状态后最少的次数(必须的次数)就确定了,大概从右往左扫一遍就可以求出来了
-
还有个性质:每一个键都无法用其他键组合而成
-
也就是这些必须键必须按到具体上,如果按错了,那么还需要在同一个按键上按回来
-
那么设
为从还剩 个必须键到还剩 个必须键的期望次数
-
分别表示按的是不是必须键
-
答案就是
- 考虑每一对相邻的选项对答案的贡献
-
首先定一个根
-
设
表示 到父亲的期望步数
- 设
表示 到 的期望步数,同理
-
通过边界条件,
可以线性求出 -
对于每个点求到根的和
-
那么考虑
,其实就是 的一个贡献,也就是 -
那么考虑点
做 时候的贡献,这个可以通过扫一遍子节点得到 -
总的复杂度就是
-
考虑先求出每个点期望经过的次数,不能算
,因为到了 就停下了 -
那么对于一条边
期望经过的次数就是
-
-
当
时, -
当
时,假设之前的 的长度为 , -
当
时, -
所以我们在递推的时候,不只需要求期望的答案,还要求期望的长度
-
上面证明了为什么可以用期望的长度来算期望的长度
-
矩阵树定理实际上求的是
-
这个题求的是
-
把无关的提出来,剩下的就按照矩阵树定理来做
-
第一问好说
-
第二问,对于一棵树,我们考虑跟节点的两个子树
-
这两个子树之间的形态的概率是一样的
-
这个恰好不是很好看,改成大于等于
-
设
表示 个叶子,深度 的概率,那么
-
先将关键数字筛出来,假设有
个 -
那么就是求关键数字全部被选完最末尾的数字的期望位置,然后乘上
-
那么求出最后一个位置在某个位置的概率,这个显然可以用组合数学来做
-
可以说很暴力的一个做法
-
先预处理出
表示 向 的下一步是哪个点 -
设
为 到 的期望,我们直接暴力的做,记忆化搜索 -
总的复杂度是
-
-
考虑第
轮 仍然存活的概率 -
我们将每次操作看成一种合并的话,总的方案数就是
-
对于一个数,找到它前面第一个比它大的数,和后面第一个比它大的数,假设为
-
那么如果这个数和
之后到自己的边合并,就不会有任何影响,否则自己一定就会被吃掉 -
设
都被选的概率为 ,设 的概率是 -
那么
-
对于这种高维的期望,有一些套路
-
考虑对于一个序列的
,假设之前的联通块的长度为 -
-
这个地方肯定不能将
拆了,因为 只有在 不相关的时候有用 -
所以我们需要先用二项式在里面变换一下,再拆开
-
所以我们需要维护
-
放在树上也是一样的套路
-
设
表示以 为节点期望下 的和 -
设
表示以 为节点期望下除了 的联通块剩下的联通块的 次方和的期望 -
转移参考:
void dfs(int num)
{
f[num][0]=1;
for (int i=0,v;i<g[num].size();i++)
if (!f[v=g[num][i]][0]){
dfs(v);
sum[num]=(sum[num]+(mod+1-p[num])*f[v][k]+sum[v])%mod;
for (int j=k;j;j--){
ll sav=0;
for (int p=0;p<=j;p++)
sav=(sav+C[j][p]*f[num][p]%mod*f[v][j-p])%mod;
f[num][j]=sav;
}
}
for (int j=k;j;j--){
ll sav=0;
for (int p=0;p<=j;p++)
sav=(sav+C[j][p]*f[num][p])%mod;
f[num][j]=sav*p[num]%mod;
}
}
-
对于基环树,考虑先确定一个点为白点,然后就可以当成一条链来做
-
然后再确定这个点为黑点,确定下一个点为白点,然后就又可以当成一条链来做了,然后依次类推
-
那么复杂度就是
-
还有优化成
,这里就不说了
CF908D New Year and Arbitrary Arrangement
-
如果一开始是一堆
,可以把这些 都去掉,然后再继续 -
所以我们钦定第一个就是
-
每次放
对于前面的影响有关于前面的 数量,又因为有限制,所以带上前面 的数量 -
因为是期望,考虑倒推
-
设
表示前缀有 个 ,有 个 期望的子序列个数
-
边界就是
,此时就可以立刻停止了 -
时,期望的子序列个数就是 -
具体证明可以参考几何分布的证明,几个可能对推式子有用的式子:
CF804D Expected diameter of a tree
-
对于一次询问,可以做到
-
对于多次询问,其实没有更好的解决方法了,而事实上对于这个题目有一点点根号分治的感觉
-
所以考虑记忆化,复杂度是正确的
-
可以发现最终的状态就是前面
个 0 ,后面全是 1 -
那么考虑上一轮是由哪一些状态转移过来
-
一种是上一次就是这样,然后选择到的是
或者 -
一种就是上一次的选择是
,也就是我们需要知道上一次前 个位置中有 个 0 的概率 -
那么我们设
表示第 轮前 个中有 个 0 的概率 -
那么显然一个
只会和上一轮的 有关 -
观察到这个
,那么很明显要用到矩乘 -
我们将这个系数矩阵建出来,然后矩乘就可以了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探