【BZOJ4944】【NOI2017】泳池 概率DP 常系数线性递推 特征多项式 多项式取模

该博客详细介绍了如何解决NOI2017竞赛中的一道概率DP题目,涉及最大安全子矩形的概率计算。通过矩阵快速幂、特征多项式和NTT取模等方法,优化了时间复杂度,最终达到O(klogklogn)。
摘要由CSDN通过智能技术生成

题目大意

  有一个 1001×n 1001 × n 的的网格,每个格子有 q q 的概率是安全的, 1 q 的概率是危险的。

  定义一个矩形是合法的当且仅当:

  • 这个矩形中每个格子都是安全的
  • 必须紧贴网格的下边界

  问你最大的合法子矩形大小为 k k 的概率是多少。

   n 10 9 , k 1000

  吉老师:这题本来是 k20000 k ≤ 20000

题解

  一道好题。

  我们计算最大子矩形不超过 i i 的答案 s i ,那么答案就是 sksk1 s k − s k − 1

  显然最后一行连续的安全格子不会超过 k k 个。

  设 g i , j 表示长度为 j j ,高度为 i 的海域全部是安全的,剩下的部分未知,最大子矩形 k ≤ k 的概率。

  设 hi,j h i , j 表示长度为 j j ,高度为 i + 1 的海域中,前 i i 行全部是安全的,剩下的未知且 ( i + 1 , j ) 是危险的,最大子矩形 k ≤ k 的概率。

  边界:

gk,1gi,0hi,0=qk(1q)=1=1(1)(2)(3) (1) g k , 1 = q k ( 1 − q ) (2) g i , 0 = 1 (3) h i , 0 = 1

  那么我们从 k1 k − 1 1 1 DP,对于 i j j 列,枚举第 i + 1 行的下一个危险的格子在哪个地方,然后转移:
gi,j
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值