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秒钟后,整个网格的上边界和下边界仍 ...
随机推荐
- .NET Core:在ASP.NET Core WebApi中使用Cookie
一.Cookie的作用 Cookie通常用来存储有关用户信息的一条数据,可以用来标识登录用户,Cookie存储在客户端的浏览器上.在大多数浏览器中,每个Cookie都存储为一个小文件.Cookie表示 ...
- jsoup的Node类
一.简介 Node类直接继承Object,实现了Cloneable接口,它是一个抽象类,类声明:public abstract class Node extends Object implements ...
- 15.SpringMVC之异步请求
SpringMVC中异步请求相关组件 SpringMVC在此基础上对异步请求进行了封装.提供了AsyncWebRequest类型的request,并提供了处理异步请求的管理器WebAsyncManag ...
- C# 计算文件的MD5
MD5的作用详见:https://baike.baidu.com/item/MD5/212708?fr=aladdin public static string GetFileMD5(string f ...
- 面试必问题:JS防抖与节流
摘要:防抖与节流可谓是面试常见,其实很好理解,下面带你分分钟了解防抖与节流的基本思想与写法~ 本文分享自华为云社区<JS防抖与节流快速了解与应用>,作者:北极光之夜. . 一.速识防抖: ...
- jQuery mobile网格布局
3.4 内容格式化 jQuery Mobile中提供了许多非常有用的工具与组件,如多列的网格布局.折叠形的面板控制等,这些组件可以帮助开发者快速实现正文区域内容的格式化. 3.4.1 网格布局 jQu ...
- MySQL-SQL基础1
p.p1 { margin: 0; font: 11px Menlo; background-color: rgba(128, 128, 128, 0.5); min-height: 13px } p ...
- python类、继承
Python 是一种面向对象的编程语言.Python 中的几乎所有东西都是对象,拥有属性和方法.类(Class)类似对象构造函数,或者是用于创建对象的"蓝图". 一.python ...
- NOIP模拟16:「Star Way To Heaven·God Knows·Loost My Music」
T1:Star Way To Heaven 基本思路: 最小生成树. 假如我们将上边界与下边界看作一个点,然后从上边界经过星星向下边界连边,会发现,他会形成一条线将整个矩形分为左右两个部分. ...
- Spring Cloud Eureka 实践(二)
接上一篇的内容,Eureka服务已经启动成功后,可以尝试开发服务的提供者与消费者,并注册到Eureka来实现服务的发现与调用. 首先,在父工程中继续创建服务提供者的Module,最新的目录结构如下图所 ...