[BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)
https://blog.csdn.net/xyz32768/article/details/83217209
不难找到DP方程与辅助DP方程,发现DP方程具有后效性,于是高斯消元即可。
但朴素消元显然无法通过,注意到f[i]的方程至多与f[i+1]有关,于是从下往上依次消去最后一个数,剩下的就是一个下三角,直接求解即可。
注意中间与指数有关的计算能预处理的就不用快速幂,以及阶乘等值可以在程序开头预处理。
复杂度$O(n^2)$,不知道为什么和别人的代码相比常数巨大。
#include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=,mod=1e9+;
int n,m,p,k,T,d[N],pw[N],fac[N],inv[N],P[N][N],a[N][N]; int ksm(int a,int b){
int res=;
for (; b; a=1ll*a*a%mod,b>>=)
if (b & ) res=1ll*res*a%mod;
return res;
} bool Gauss(){
for (int i=n; i; i--){
if (!a[i][i]) return ;
int t=1ll*a[i-][i]*ksm(a[i][i],mod-)%mod;
rep(j,,i) a[i-][j]=(a[i-][j]-1ll*t*a[i][j]%mod+mod)%mod;
a[i-][n+]=(a[i-][n+]-1ll*t*a[i][n+]%mod+mod)%mod;
}
rep(i,,n){
rep(j,,i-) a[i][n+]=(a[i][n+]-1ll*a[i][j]*a[j][n+]%mod+mod)%mod;
a[i][n+]=1ll*a[i][n+]*ksm(a[i][i],mod-)%mod;
}
return ;
} int main(){
freopen("heal.in","r",stdin);
freopen("heal.out","w",stdout);
n=;
fac[]=; rep(i,,n) fac[i]=1ll*fac[i-]*i%mod;
inv[n]=ksm(fac[n],mod-);
for (int i=n-; ~i; i--) inv[i]=1ll*inv[i+]*(i+)%mod;
for (scanf("%d",&T); T--; ){
scanf("%d%d%d%d",&n,&p,&m,&k);
rep(i,,n+) rep(j,,n+) a[i][j]=P[i][j]=;
d[]=; rep(i,,min(n,k)) d[i]=1ll*d[i-]*(k-i+)%mod;
pw[]=ksm(m,k); int t=ksm(m,mod-);
rep(i,,min(n,k)) pw[i]=1ll*pw[i-]*t%mod;
if (k<=n) pw[k]=;
if (!k || (!m && k==)){ puts("-1"); continue; }
t=ksm(ksm(m+,k),mod-);
rep(i,,n){
int sm=;
rep(j,,min(i,k))
P[i][j]=(i==j)?(-sm+mod)%mod:1ll*d[j]*inv[j]%mod*pw[j]%mod*t%mod,sm+=P[i][j];
}
a[][]=; int inv=ksm(m+,mod-);
rep(i,,n-){
a[i][n+]=a[i][i]=mod-;
rep(j,,i+){
a[i][i-j+]=(a[i][i-j+]+1ll*P[i+][j]*inv)%mod;
a[i][i-j]=(a[i][i-j]+1ll*P[i][j]*inv%mod*m)%mod;
}
}
a[n][n+]=a[n][n]=mod-;
rep(j,,n) a[n][n-j]=(a[n][n-j]+P[n][j])%mod;
if (Gauss()) printf("%d\n",a[p][n+]); else puts("-1");
}
return ;
}
[BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)的更多相关文章
- luoguP4457 [BJOI2018]治疗之雨 概率期望 + 高斯消元
应该是最后一道紫色的概率了....然而颜色啥也代表不了.... 首先看懂题意: 你现在有$p$点体力,你的体力上限为$n$ 在一轮中, 1.如果你的体力没有满,你有$\frac{1}{m + 1}$的 ...
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- LightOJ - 1151概率dp+高斯消元
概率dp+高斯消元 https://vjudge.net/problem/LightOJ-1151 题意:刚开始在1,要走到100,每次走的距离1-6,超过100重来,有一些点可能有传送点,可以传送到 ...
- 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...
- BZOJ3270 博物館 概率DP 高斯消元
BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...
- BZOJ 3270: 博物馆 [概率DP 高斯消元]
http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...
- 【BZOJ3640】JC的小苹果 概率DP+高斯消元
[BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. “你是我的小丫小苹果,怎么爱你都不嫌多!” “点亮我生命的火,火火火火火!” 话说JC历经艰辛来到了城市B,但 ...
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- BZOJ 3640: JC的小苹果 [概率DP 高斯消元 矩阵求逆]
3640: JC的小苹果 题意:求1到n点权和\(\le k\)的概率 sengxian orz的题解好详细啊 容易想到\(f[i][j]\)表示走到i点权为j的概率 按点权分层,可以DP 但是对于\ ...
随机推荐
- CCN与CDN区别
CCN与CDN区别 相同点: 1.针对目前互联网上存在问题,提出解决方案,让数据传输更快更稳定. 2.都均衡网络流量. 区别: 1.CDN是内容分发网络,是基于目前的TCP/IP体系结构的补充方法.C ...
- 82.Linux之VMware10.0.4_x64安装
一直想写linux前期软件的一些安装配置的博客,因为中途去弄CORDIC算法了,今天上午刚弄好,除法,乘累加,三角函数等都能达到要求,所以现在来写这块的博客,CORDIC博客就不写了,因为网上很多.V ...
- IDL界面程序直接调用envi菜单对应功能
参考自http://blog.sina.com.cn/s/blog_764b1e9d010115qu.html 参考文章的方法是构建一个button控件,通过单击实现,这种方法比较复杂,不是我们经常能 ...
- jQuery中绑定事件的几种方法
以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){}); (2)target.bind("click",functi ...
- Bootstrap FileInput 多图上传插件 文档属性说明
Bootstrap FileInput 多图上传插件 原文链接:http://blog.csdn.net/misterwho/article/details/72886248?utm_source ...
- 洛谷P3366最小生成树
传送门啦 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...
- 本地为Windows,使用Xshell登录Linux云主机
以某东的云主机为实例 1. 下载并安装远程登录软件 下载Xshell软件 下载后双击xshell5_5.0.1332.exe进行安装 2. 安装完成,打开Xshell,并点击新建,根据要求输入相应参数 ...
- LeetCode282. Expression Add Operators
Given a string that contains only digits 0-9 and a target value, return all possibilities to add bin ...
- Linux学习笔记:ps -ef、ps aux、kill -9
一.查看进程命令 1.ps命令 Linux中的ps命令是Process Status的缩写. ps命令用来列出系统中当前运行的那些进程. ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻 ...
- Python练手之爬虫
很久没更新博客了,最近自学Python,写个在百度上爬算法题题解的爬虫,第一次写爬虫..纯当练手 慢慢来.. #coding:utf-8 ''' Created on 2016年11月22日 @aut ...