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秒钟后,整个网格的上边界和下边界仍 ...
随机推荐
- git上传项目
$ git config --global user.name "xxxxxxxx" --设置名字 $ git config --global user.email "x ...
- ecshop文件架构
/*ECShop 2.5.1 的结构图及各文件相应功能介绍ECShop2.5.1_Beta upload 的目录┣ activity.php 活动列表┣ affiche.php 广告处理文件┣ aff ...
- 分享几个下载豆瓣资源的chrome插件
最近chrome终于以4.69%的市场占有率击败firefox成为中国第二大浏览器.(第一当然是争霸宇宙的IE了) 虽然chrome官方应用程序商店有不少豆瓣的辅助插件,但大多没什么用.属于蛋疼插件. ...
- golang channel原理
channel介绍 channel一个类型管道,通过它可以在goroutine之间发送和接收消息.它是Golang在语言层面提供的goroutine间的通信方式. 众所周知,Go依赖于称为CSP(Co ...
- python实现遥感图像阈值分割
1.阈值分割 import os import cv2 import numpy as np import matplotlib.pyplot as plt from osgeo import gda ...
- 浅谈 JVM GC 的安全点与安全区域
OopMap 前文我们说到,JVM 采用的可达性分析法有个缺点,就是从 GC Roots 找引用链耗时. 都说他耗时,他究竟耗时在哪里? GC 进行扫描时,需要查看每个位置存储的是不是引用类型,如果是 ...
- pyRevit开发:如何创建轴网
必看部分: Document获取: 必看文章 如何添加基本项目引用 基础部分: 创建轴网 基本思路: 首先添加引用 获取当前项目文档 创建轴网定位线 创建轴网 设置轴网名称 实现代码: import ...
- 源码编译安装LAMP
LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境.LAMP是一个缩写词,具体包括Linux操作系统.Apache网站服务器 ...
- Java == 和 equals的区别
== 是操作符,equals是方法. 对于基本类型变量来说,只能使用 == ,因为基本类型的变量没有方法.使用==比较是值比较. 对于引用类型的变量来说,==比较的两个引用对象的地址是否相等.所有类都 ...
- SQL语句分组获取记录的第一条数据的方法
使用Northwind 数据库 首先查询Employees表 查询结果: city列里面只有5个城市 使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY CO ...