CF708E-Student‘s Camp【数学期望,dp】
正题
题目链接:https://www.luogu.com.cn/problem/CF708E
题目大意
有\(n*m\)的矩形网格,然后每次每行最左边和最右边的格子各有\(p=\frac{c}{d}\)的概率会消失,进行\(k\)次。
求最后所有格子依旧四联通的概率,在\(\%(10^9+7)\)的情况下进行
\(1\leq n,m\leq 1500,1\leq k\leq 10^5\)
解题思路
\(n,m\)很小,感觉上不是一个暴力计数的题目。
可以考虑一个比较慢的方法先,先考虑一个方向腐蚀了\(i\)次的概率设为\(E_i\)那么显然地有
\]
然后设\(f_{i,l,r}\)表示到第\(i\)层时,剩下了\(l\sim r\)且上面的层都联通的概率。
那么一个简单的\(dp\)有
\]
先把这个方程优化到\(O(nm^2)\),设\(L_{i,j}=\sum_{l\leq r<j}f_{i,l,r},R_{i,j}=\sum_{r>l\geq j}f_{i,l,r},S_{i}=\sum f_{i,l,r}\)
那么有
\]
嗯然后我们要把\(f\)的状态数转到\(O(nm)\)的,其实不难发现的一点是这些东西都具有对称性,也就是\(f_{i,l,r}=f_{i,n-r+1,n-l+1}\)。所有我们可以设\(F_{i,j}=\sum_{k=1}^jf_{i,k,j}\)
那么有\(L_{i,j}=\sum_{k=1}^jF_{i,k}\)因为对称性又有\(R_{i,j}=L_{i,n-j+1}\)所以此时我们已经可以表示出所有的\(F,L,R\)了。考虑这个\(F\)如何转移
\]
\]
这样就是\(O(nm)\)的了,可以通过本题
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1510,P=1e9+7,K=1e5+10;
ll n,m,p,q,k,fac[K],inv[K],E[N],S[N];
ll f[N][N],s[N][N],t[N][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;
}
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
signed main()
{
scanf("%lld%lld",&n,&m);
scanf("%lld%lld",&p,&q);p=p*power(q,P-2)%P;
scanf("%lld",&k);q=P+1-p;inv[1]=1;
for(ll i=2;i<K;i++)inv[i]=P-inv[P%i]*(P/i)%P;
fac[0]=inv[0]=1;
for(ll i=1;i<K;i++)
fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;
for(ll i=0;i<=min(k,m);i++)E[i]=C(k,i)*power(p,i)%P*power(q,k-i)%P;
S[0]=E[0];for(ll i=1;i<=m;i++)S[i]=(S[i-1]+E[i])%P;
s[0][m]=f[0][m]=1;
for(ll i=1;i<=n;i++){
for(ll j=1;j<=m;j++){
f[i][j]=E[m-j]*((s[i-1][m]-s[i-1][m-j])*S[j-1]%P-t[i-1][j])%P;
s[i][j]=(s[i][j-1]+f[i][j])%P;
t[i][j]=(t[i][j-1]+s[i][j-1]*E[j-1]%P)%P;
}
}
printf("%lld\n",(s[n][m]+P)%P);
return 0;
}
CF708E-Student‘s Camp【数学期望,dp】的更多相关文章
- codeforces1097D Makoto and a Blackboard 数学+期望dp
题目传送门 题目大意: 给出一个n和k,每次操作可以把n等概率的变成自己的某一个因数,(6可以变成1,2,3,6,并且概率相等),问经过k次操作后,期望是多少? 思路:数学和期望dp 好题好题!! ...
- lightoj1038(数学期望dp)
题意:输入一个数N,N每次被它的任意一个因数所除 变成新的N 这样一直除下去 直到 N变为1 求变成1所期望的次数 解析: d[i] 代表从i除到1的期望步数:那么假设i一共有c个因子(包括1和本身) ...
- 【BZOJ4872】[Shoi2017]分手是祝愿 数学+期望DP
[BZOJ4872][Shoi2017]分手是祝愿 Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n ...
- BZOJ 1426: 收集邮票 数学期望 + DP
Description 有n种不同的邮票,皮皮想收集所有种类的邮票.唯一的收集方法是到同学凡凡那里购买,每次只能买一张,并且 买到的邮票究竟是n种邮票中的哪一种是等概率的,概率均为1/n.但是由于凡凡 ...
- Student's Camp CodeForces - 708E (dp,前缀和优化)
大意: $n$行$m$列砖, 白天左侧边界每块砖有$p$概率被摧毁, 晚上右侧边界有$p$概率被摧毁, 求最后上下边界连通的概率. 记${dp}_{i,l,r}$为遍历到第$t$行时, 第$t$行砖块 ...
- CF708E Student's Camp
麻麻我会做*3100的计数了,我出息了 考虑朴素DP我们怎么做呢. 设\(f_{i,l,r}\)为第\(i\)层选择\(l,r\)的依旧不倒的概率. \(q(l,r)\)表示经历了\(k\)天后,存活 ...
- 【CF712E】Memory and Casinos(数学 期望 DP)
题目链接 大意 给出一个序列,当你在某个点时,有一个向右走的概率\(P_i\)(向左为\(1-P_i\)), 给出\(M\)个操作,操作有两类: 1 X Y Z:把\(P_X\)的值修改为\(\fra ...
- [题解]数学期望_luogu_P1850_换教室
数学期望dp,题面第一次见很吓人,然而从CCF语翻译成人话就简单多了, 开始一般会想到用 f [ i ] [ j ]表示前 i 个课程申请 j 次的期望,然而其实会发现转移的时候还和上一次的情况有关( ...
- 【CF708E】Student's Camp 组合数+动态规划
[CF708E]Student's Camp 题意:有一个n*m的网格,每一秒钟,所有左面没有格子的格子会有p的概率消失,右面没有格子的格子也会有p的概率消失,问你t秒钟后,整个网格的上边界和下边界仍 ...
随机推荐
- Centos7 出现Welcome to emergency mode!【紧急模式】
Centos7 出现Welcome to emergency mode![紧急模式] 做mount挂载时,修改了 /etc/fstab 文件,导致Centos7重启时出现如下图所示错误: 输入r ...
- Tcp三次握手中细节
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如下图所示.主机A为客户机,主机B为服务器 说明:(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B ...
- 深入浅出Mybatis系列(二)---Mybatis入门
一.Mybatis环境搭建及简单实例 1. 新建web项目, 添加依赖包:mybatis包.数据库驱动包(我使用的是mysql).日志包(我使用的是log4j), 由于我的是maven项目, 那么添加 ...
- linux(1)------vmvear虚拟机安装linux
1.VMvare14(个人下载,软件付费,自行解决) 2.CentOS下载 https://www.centos.org/download/ 官方网址,后期会跳转本地镜像站 ...
- 统计学习:线性可分支持向量机(SVM)
模型 超平面 我们称下面形式的集合为超平面 \[\begin{aligned} \{ \bm{x} | \bm{a}^{T} \bm{x} - b = 0 \} \end{aligned} \tag{ ...
- Python创建二维列表的正确姿势
Python创建二维列表的正确姿势 简介 Python中没有数组,使用list结构代替,并且list结构的功能更加强大: 支持动态扩容,无需担心元素过量 对list内的元素类型不做一致性约束 提供丰富 ...
- unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source 解决办法
Project -> Properties -> C/C++ -> Precompiled Headers -> Precompiled Header -> 选择Not ...
- css写法
id选择器 > 类选择器 > 标签选择器 @charset "utf-8"; charset=utf-8 表示当前文档的字符集是采用utf-8的字符,也就是我们常说 ...
- Python中管理数据库
前言:Python中是利用MySQL模块和数据库之间建立联系. MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL ...
- shell脚本中select循环语句用法
shell脚本中select循环语句 1. 脚本中select的语法格式 select VAR in LIST do command1 command2 ... ... commandN done s ...