[BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)
https://blog.csdn.net/xyz32768/article/details/83217209
不难找到DP方程与辅助DP方程,发现DP方程具有后效性,于是高斯消元即可。
但朴素消元显然无法通过,注意到f[i]的方程至多与f[i+1]有关,于是从下往上依次消去最后一个数,剩下的就是一个下三角,直接求解即可。
注意中间与指数有关的计算能预处理的就不用快速幂,以及阶乘等值可以在程序开头预处理。
复杂度$O(n^2)$,不知道为什么和别人的代码相比常数巨大。
1 #include<cstdio> 2 #include<algorithm> 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 4 using namespace std; 5 6 const int N=3010,mod=1e9+7; 7 int n,m,p,k,T,d[N],pw[N],fac[N],inv[N],P[N][N],a[N][N]; 8 9 int ksm(int a,int b){ 10 int res=1; 11 for (; b; a=1ll*a*a%mod,b>>=1) 12 if (b & 1) res=1ll*res*a%mod; 13 return res; 14 } 15 16 bool Gauss(){ 17 for (int i=n; i; i--){ 18 if (!a[i][i]) return 0; 19 int t=1ll*a[i-1][i]*ksm(a[i][i],mod-2)%mod; 20 rep(j,0,i) a[i-1][j]=(a[i-1][j]-1ll*t*a[i][j]%mod+mod)%mod; 21 a[i-1][n+1]=(a[i-1][n+1]-1ll*t*a[i][n+1]%mod+mod)%mod; 22 } 23 rep(i,1,n){ 24 rep(j,0,i-1) a[i][n+1]=(a[i][n+1]-1ll*a[i][j]*a[j][n+1]%mod+mod)%mod; 25 a[i][n+1]=1ll*a[i][n+1]*ksm(a[i][i],mod-2)%mod; 26 } 27 return 1; 28 } 29 30 int main(){ 31 freopen("heal.in","r",stdin); 32 freopen("heal.out","w",stdout); 33 n=1500; 34 fac[0]=1; rep(i,1,n) fac[i]=1ll*fac[i-1]*i%mod; 35 inv[n]=ksm(fac[n],mod-2); 36 for (int i=n-1; ~i; i--) inv[i]=1ll*inv[i+1]*(i+1)%mod; 37 for (scanf("%d",&T); T--; ){ 38 scanf("%d%d%d%d",&n,&p,&m,&k); 39 rep(i,0,n+1) rep(j,0,n+1) a[i][j]=P[i][j]=0; 40 d[0]=1; rep(i,1,min(n,k)) d[i]=1ll*d[i-1]*(k-i+1)%mod; 41 pw[0]=ksm(m,k); int t=ksm(m,mod-2); 42 rep(i,1,min(n,k)) pw[i]=1ll*pw[i-1]*t%mod; 43 if (k<=n) pw[k]=1; 44 if (!k || (!m && k==1)){ puts("-1"); continue; } 45 t=ksm(ksm(m+1,k),mod-2); 46 rep(i,1,n){ 47 int sm=0; 48 rep(j,0,min(i,k)) 49 P[i][j]=(i==j)?(1-sm+mod)%mod:1ll*d[j]*inv[j]%mod*pw[j]%mod*t%mod,sm+=P[i][j]; 50 } 51 a[0][0]=1; int inv=ksm(m+1,mod-2); 52 rep(i,1,n-1){ 53 a[i][n+1]=a[i][i]=mod-1; 54 rep(j,0,i+1){ 55 a[i][i-j+1]=(a[i][i-j+1]+1ll*P[i+1][j]*inv)%mod; 56 a[i][i-j]=(a[i][i-j]+1ll*P[i][j]*inv%mod*m)%mod; 57 } 58 } 59 a[n][n+1]=a[n][n]=mod-1; 60 rep(j,0,n) a[n][n-j]=(a[n][n-j]+P[n][j])%mod; 61 if (Gauss()) printf("%d\n",a[p][n+1]); else puts("-1"); 62 } 63 return 0; 64 }
转载于:https://www.cnblogs.com/HocRiser/p/10387286.html
[BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)相关推荐
- BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...
- 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元
题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...
- BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】
题目描述: 中文题面,不多解释.1778传送门 3270 传送门 (博物馆)题目分析: 也许很多人做概率题的时候都有种虚幻感..感觉莫名其妙就得出一个期望.概率,一知半解... 所以我在这里仔细地剖析 ...
- 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的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...
- AC自动机 + 概率dp + 高斯消元 --- HDU 5955 or 2016年沈阳icpc H [AC自动机 + 概率dp + 高斯消元]详解
题目链接 题目大意: 就是有NNN个人,每个人都会猜一个长度为LLL的只包含{1,2,3,4,5,6}\{1,2,3,4,5,6\}{1,2,3,4,5,6}的序列,现在裁判开始投掷骰子,并且把每次的 ...
- hdu4418 概率dp+高斯消元(近日吐槽)
因为过年,好久没更博客了,最近要狂补题解了== 1.做了几天的概率dp,稍后还要写一篇概率dp和期望的总结,当然,下面几天的专题还是概率dp 2.接着还要整理一个漂亮的高斯消元模板= 3.最近打了几场 ...
- bzoj 4820: [Sdoi2017]硬币游戏 概率dp+高斯消元+KMP
题意 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强趣味性,所以要找一个同学扔很多 ...
最新文章
- 慢系统调用与信号中断
- react useRef()函数
- Java学完可以应用在什么领域?这8大领域你要知道
- Linux对文件内容基本操作(学习笔记七)
- Java调用webservice.asmx接口.
- vue传中文标点_vue项目引入第三方高德地图实现标点定位
- 安卓APP_ 布局(7) —— ViewPager翻页
- GitHub 2017 年度报告,最受欢迎的编程语言是?
- 如何使用Python处理丢失的数据
- Excel VBA 重要参考(原始的VBA代码)
- 清华竟然开设:《摸鱼学导论》,这门课火了!
- 【半年总结】---凤凰涅槃,历久弥新
- python对csv文件中的数据进行分类_python 数据处理 对csv文件进行数据处理
- 2017计算机办公自动化试题,2017办公自动化考试试题
- 超全!0基础程序员从入门到工作(持续更新...)
- 精英模具设计师的“葵花宝典”
- 融云助力中国企业打造海外云平台
- 计算机网络技术组装与维护,计算机组装与维护计算机网络技术(组网)()课程标准(范文).doc...
- 欢迎使用CSDN-markdown编辑器不啵啵啵啵啵啵啵啵啵啵啵啵
- 失传万年的PS致富经典(一)