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+高斯消元)相关推荐

  1. BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元

    BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元 题意: 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 3 ...

  2. 【bzoj1778】[Usaco2010 Hol]Dotp 驱逐猪猡 矩阵乘法+概率dp+高斯消元

    题目描述 奶牛们建立了一个随机化的臭气炸弹来驱逐猪猡.猪猡的文明包含1到N (2 <= N <= 300)一共N个猪城.这些城市由M (1 <= M <= 44,850)条由两 ...

  3. BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】

    题目描述: 中文题面,不多解释.1778传送门 3270 传送门 (博物馆)题目分析: 也许很多人做概率题的时候都有种虚幻感..感觉莫名其妙就得出一个期望.概率,一知半解... 所以我在这里仔细地剖析 ...

  4. BZOJ3270 博物館 概率DP 高斯消元

    BZOJ3270 博物館 概率DP 高斯消元 @(XSY)[概率DP, 高斯消元] Description 有一天Petya和他的朋友Vasya在进行他们众多旅行中的一次旅行,他们决定去参观一座城堡博 ...

  5. BZOJ 3270: 博物馆 [概率DP 高斯消元]

    http://www.lydsy.com/JudgeOnline/problem.php?id=3270 题意:一张无向图,一开始两人分别在$x$和$y$,每一分钟在点$i$不走的概率为$p[i]$, ...

  6. 【BZOJ3640】JC的小苹果 概率DP+高斯消元

    [BZOJ3640]JC的小苹果 Description 让我们继续JC和DZY的故事. "你是我的小丫小苹果,怎么爱你都不嫌多!" "点亮我生命的火,火火火火火!&qu ...

  7. 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}的序列,现在裁判开始投掷骰子,并且把每次的 ...

  8. hdu4418 概率dp+高斯消元(近日吐槽)

    因为过年,好久没更博客了,最近要狂补题解了== 1.做了几天的概率dp,稍后还要写一篇概率dp和期望的总结,当然,下面几天的专题还是概率dp 2.接着还要整理一个漂亮的高斯消元模板= 3.最近打了几场 ...

  9. bzoj 4820: [Sdoi2017]硬币游戏 概率dp+高斯消元+KMP

    题意 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强趣味性,所以要找一个同学扔很多 ...

最新文章

  1. 慢系统调用与信号中断
  2. react useRef()函数
  3. Java学完可以应用在什么领域?这8大领域你要知道
  4. Linux对文件内容基本操作(学习笔记七)
  5. Java调用webservice.asmx接口.
  6. vue传中文标点_vue项目引入第三方高德地图实现标点定位
  7. 安卓APP_ 布局(7) —— ViewPager翻页
  8. GitHub 2017 年度报告,最受欢迎的编程语言是?
  9. 如何使用Python处理丢失的数据
  10. Excel VBA 重要参考(原始的VBA代码)
  11. 清华竟然开设:《摸鱼学导论》,这门课火了!
  12. 【半年总结】---凤凰涅槃,历久弥新
  13. python对csv文件中的数据进行分类_python 数据处理 对csv文件进行数据处理
  14. 2017计算机办公自动化试题,2017办公自动化考试试题
  15. 超全!0基础程序员从入门到工作(持续更新...)
  16. 精英模具设计师的“葵花宝典”
  17. 融云助力中国企业打造海外云平台
  18. 计算机网络技术组装与维护,计算机组装与维护计算机网络技术(组网)()课程标准(范文).doc...
  19. 欢迎使用CSDN-markdown编辑器不啵啵啵啵啵啵啵啵啵啵啵啵
  20. 失传万年的PS致富经典(一)

热门文章

  1. C及C++中typedef的简单使用指南
  2. git常用命名行总结
  3. 【Visual Studio 扩展工具】使用 ComponentOne迷你图控件,进行可视化数据趋势分析...
  4. AHOI2009 中国象棋
  5. angular2集成highchart
  6. mysql 日志文件mysql-bin文件清除方法,和mysql-bin相关文件的配置
  7. mongoose多条件模糊查询实例
  8. 20161023 NOIP 模拟赛 T1 解题报告
  9. gparted 不能起作用的时候,用fdisk
  10. redis集群安装和java应用