Ybt#452-序列合并【期望dp】
正题
题目链接:https://www.ybtoj.com.cn/contest/113/problem/2
题目大意
一个空序列,每次往末尾加入一个[1,m][1,m][1,m]中的随机一个数。如果末尾两个数相同都为xxx且(x<t)(x<t)(x<t),那么将它们合并成x+1x+1x+1。
如果序列长度为nnn且无法合并则结束,求序列期望和。
n,m∈[1,103],t∈[1,109]n,m\in[1,10^3],t\in[1,10^9]n,m∈[1,103],t∈[1,109]
解题思路
首先显然地t=min{n+m−1,t}t=min\{n+m-1,t\}t=min{n+m−1,t}。
之后考虑序列中的每一个位置可能的数,因为每种情况都有可能,所以我们需要算概率先,设pi,jp_{i,j}pi,j表示剩余iii个位置时出现jjj的概率,那么有pi,j=1m×[j≤m]+pi,j−12p_{i,j}=\frac1m\times [j\leq m]+p_{i,j-1}^2pi,j=m1×[j≤m]+pi,j−12(直接出现或者合并出来)。
设pi,j×qi,jp_{i,j}\times q_{i,j}pi,j×qi,j表示剩下iii个位置且第一个最终是jjj的概率,那么有qi,j=1−pi−1,j×[j<t]q_{i,j}=1-p_{i-1,j}\times [j<t]qi,j=1−pi−1,j×[j<t](qi,jq_{i,j}qi,j就表示在出现了jjj的前提下不变的概率,减去会变的概率就好了)。
但是因为每个位置的概率不是独立的,所以不能直接用这个来算答案。
设pi,j×gi,jp_{i,j}\times g_{i,j}pi,j×gi,j表示在剩下iii个位置且第一个最终是jjj时和的期望和(注意期望=概率*次数),pi,j×fi,jp_{i,j}\times f_{i,j}pi,j×fi,j表示剩下iii个位置时第一个出现过jjj的情况的期望和,ansians_iansi表示剩下iii个位置时的期望和。
那么有
ansi=∑j=1tpi,j×gi,jans_i=\sum_{j=1}^{t}p_{i,j}\times g_{i,j}ansi=j=1∑tpi,j×gi,j
考虑ggg的递推式有
gi,j=qi,j×j+ansi−1−pi−1,j×fi−1,jg_{i,j}=q_{i,j}\times j+ans_{i-1}-p_{i-1,j}\times f_{i-1,j}gi,j=qi,j×j+ansi−1−pi−1,j×fi−1,j
(有qi,jq_{i,j}qi,j的概率最终是jjj,填完剩下的,且下一个不能出现jjj)
考虑fff的递推式有
fi,j=gi,j+(1−qi,j)fi,j+1f_{i,j}=g_{i,j}+(1-q_{i,j})f_{i,j+1}fi,j=gi,j+(1−qi,j)fi,j+1
(第一种是最终不变,第二种是变成了j+1j+1j+1的情况)
这样就可以递推了,时间复杂度O(n2)O(n^2)O(n2)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2100,P=1e9+7;
ll n,m,t,p[N][N],q[N][N],g[N][N],f[N][N],ans[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
signed main()
{freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);scanf("%lld%lld%lld",&n,&m,&t);ll inv=power(m,P-2);t=min(t,n+m-1);for(ll i=1;i<=n;i++)for(ll j=1;j<=t;j++){p[i][j]=(inv*(j<=m)+p[i-1][j-1]*p[i][j-1]%P)%P;q[i][j]=(1-(j<t)*p[i-1][j]+P)%P;}for(ll i=1;i<=n;i++){for(ll j=t;j>=1;j--){if(j!=t)g[i][j]=(q[i][j]*j%P+ans[i-1]-f[i-1][j]*p[i-1][j]%P+P)%P;elseg[i][j]=(q[i][j]*j%P+ans[i-1])%P;f[i][j]=(g[i][j]%P+(1-q[i][j])*f[i][j+1]%P)%P;(ans[i]+=g[i][j]*p[i][j])%=P;}}printf("%lld\n",ans[n]);return 0;
}
Ybt#452-序列合并【期望dp】相关推荐
- 插头DP 概率DP / 期望DP
插头DP && 概率DP / 期望DP 写在前面: 插头DP P5056 [模板]插头dp 手写哈希表的方法: 拉链法的代码如下: 开放寻址法的代码如下: 接下来是这道题的代码实现: ...
- 概率期望题(期望 DP)做题记录
概率期望题(期望 DP)做题记录 P3830 [SHOI2012]随机树 难点在于第二问:生成树的期望深度. 不 wei zhuo 捏,设 \(dp_{i,j}\) 表示已经有了 \(i\) 个叶子结 ...
- 【poj2096】Collecting Bugs 期望dp
题目描述 Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other materia ...
- 【期望dp 质因数分解】cf1139D. Steps to One
有一种组合方向的考虑有没有dalao肯高抬啊? 题目大意 有一个初始为空的数组$a$,按照以下的流程进行操作: 在$1\cdots m$中等概率选出一个数$x$并添加到$a$的末尾 如果$a$中所有元 ...
- luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...
- 扩增子分析解读1质控,实验设计,双端序列合并
写在前面 之前发布的<扩增子图表解读>系列,相信很多朋友都看过了(链接直达7月文章目录). 这些内容的初衷是写给刚进实验室的学生读,加速大家对同行文章的解读能力.如果连同行的结果都看不懂, ...
- [SCOI2008]奖励关(期望dp)
你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝 ...
- 【bzoj4318】OSU! 期望dp
题目描述 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的0 ...
- 【loj6342】跳一跳 期望dp
题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...
- 【高斯消元】兼 【期望dp】例题
[总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $ ...
最新文章
- 从0学人脸识别,我花3小时复现了Eigenfaces For Recognition
- 机器学习奠基人Michael Jordan:下代技术是融合经济学,解读2项重要进展
- cocos2d-x一些核心概念介绍
- Java机器学习库ML之七分类预测输出概率值
- php div中的字上下居中,Div垂直居中效果怎么实现
- pytorch torch.nn.MSELoss(size_average=True)(均方误差【损失函数】)Mean Squared Error(MSE)、SSE(和方差)
- 全平台硬件解码渲染方法与优化实践
- terminal services 找不到_电脑局域网中查看不到其他计算机或无法连接的解决办法...
- XP硬盘分区软件测试面试,怎样让WinXP系统自检并修复硬盘?
- pcb钻孔披锋改善报告_钻孔孔钻偏改善报告
- 物联网传感技术——压电式传感器
- android+语音amr转mp3格式转换,安卓批量amr转mp3 微信amr批量转换
- 开放的在线客服系统Live Zilla
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
- 前端教程:用 Canvas 编织璀璨星空图
- Android Studio计算BMI小软件
- Revit建模中快速局部平面操作,一键搞定!
- 网络分层的真实含义是什么?
- 普通话测试软件测试成绩很差,普通话测试成绩的差异性分析
- linux强大的convert命令(可以对图像做各种处理!)
热门文章
- java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用
- win2003无法进入桌面_救急,如何通过命令行备份桌面重要文件?
- mysql数据库熟悉表空间数据文件_Oracle表空间和数据文件
- 将span隐藏的函数_分类汇总函数Subtotal和Aggregate应用技巧解读
- html5 获取文件属性,H5新属性--file文件读取
- java让对象分配在栈上_java – Hotspot何时可以在堆栈上分配对象?
- python网络运维案例代码库_OLDboy-python第八期运维教程
- python求函数极值_python 遗传算法求函数极值的实现代码
- mac 上mysql怎么卸载不了_mac的mysql怎么卸载?
- windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡