麻麻我会做*3100的计数了,我出息了

考虑朴素DP我们怎么做呢。

设\(f_{i,l,r}\)为第\(i\)层选择\(l,r\)的依旧不倒的概率。

\(q(l,r)\)表示经历了\(k\)天后,存活下来的区间为\([l,r]\)的概率。

发现其可以转为前缀后缀形式。

即前缀删掉了\(l - 1\)个,后缀删了\(m - r\)个。

而删掉的过程是独立的。

那么删掉\(i\)个的概率为\(d(i)\)

显然有\(d(i) = \binom{i}{k}p^{i} \times ({1 - p})^{k - i}\)

那么有\(q(l,r) = d(l - 1) * d(m - r)\)

那么有\(f_{i,l,r} = q(l,r) * (\sum f_{i - 1,li,ri} ([li,ri] 交于 [l,r]))\)

直接暴力枚举\([li,ri],[l,r]\)这样是\(O(nm^4)\)的

考虑我们并不需要枚举\([li,ri]\),此时我们考虑容斥。

设\(S(i) = \sum f_{i,l,r}\)

那么有不交\([l,r]\)的区间的和为\(S(i - 1) - \sum{f_{i,li,ri}(ri < li)} - \sum{f_{i,li,ri}(li > ri)}\)

那么不妨记录对\(r\)记录前缀和,对\(l\)记录后缀和。

那么设\(pre(i,j) = \sum (f_{i,l,r} (r <= j))\)

设\(fail(i,j) = \sum (f_{i,l,r} (l >= j))\)

那么改写原柿子,\(f_{i,l,r} = (d(l - 1) * d(m - r)) * (S(i - 1) - pre(i - 1,l - 1) - fail(i - 1,r + 1)\)

利用前缀后缀和,则可以做到\(O(nm^2)\)

考虑我们接着优化,因为我们发现,实际上我们并不关心每个\([l,r]\)的答案是什么。

我们只关心以\(l\)开头的,和以\(r\)结尾的dp值的和,以及全局答案。

那么启示我们枚举\(l\),并用某种后缀和计算一次性处理后缀\(r\)。

我们考虑拆项。

\((d(l - 1) * d(m - r)) * (S(i - 1) - pre(i - 1,l - 1) - fail(i - 1,r + 1) = d(l - 1) * S(i - 1) * d(m - r) - pre(i - 1,l - 1) * d(l - 1) * d(m - r) - fail(i - 1,r + 1) * d(m -r) * d(l - 1)\)

那么只要维护\(\sum pre(i - 1,l) * d(l),fail(i - 1,r + 1) * d(m - r),d(l),d(r)\)

即可。

CF708E Student's Camp的更多相关文章

  1. 【CF708E】Student's Camp 组合数+动态规划

    [CF708E]Student's Camp 题意:有一个n*m的网格,每一秒钟,所有左面没有格子的格子会有p的概率消失,右面没有格子的格子也会有p的概率消失,问你t秒钟后,整个网格的上边界和下边界仍 ...

  2. [Codeforces708E]Student's Camp

    Problem 一个n*m块砖的建筑,一共k天,每天风从两边吹,吹掉砖的概率为p,反之为1-p,求最终建筑没有倒塌的可能性(上层与下层有交集且每一层都有砖) Solution 首先,我们可以预处理出p ...

  3. [CodeForces-708E]Student's Camp

    题目大意: 一个n*m的墙,被吹k天风,每块靠边的砖都有p的概率被吹掉. 如果上下两行没有直接相连的地方,我们则认为这一堵墙已经倒塌. 问最后墙不倒塌的概率(模意义). 思路: 动态规划. 用f[i] ...

  4. Student's Camp CodeForces - 708E (dp,前缀和优化)

    大意: $n$行$m$列砖, 白天左侧边界每块砖有$p$概率被摧毁, 晚上右侧边界有$p$概率被摧毁, 求最后上下边界连通的概率. 记${dp}_{i,l,r}$为遍历到第$t$行时, 第$t$行砖块 ...

  5. Codeforces 708E - Student's Camp(前缀和优化 dp)

    Codeforces 题目传送门 & 洛谷题目传送门 神仙 *3100,%%% 首先容易注意到 \(\forall i\in[1,m]\),第 \(i\) 行剩余的砖块一定构成一个区间,设其为 ...

  6. Codeforces Round #588 (Div. 2) D. Marcin and Training Camp(思维)

    链接: https://codeforces.com/contest/1230/problem/D 题意: Marcin is a coach in his university. There are ...

  7. java.io.NotSerializableException: test.io.file.Student

    java.io.NotSerializableException: test.io.file.Student    at java.io.ObjectOutputStream.writeObject0 ...

  8. 使用java反射机制编写Student类并保存

    定义Student类 package org; public class Student { private String _name = null; ; ; public Student() { } ...

  9. 参加MVP OpenDay 和2015 MVP Community Camp社区大课堂

    微软MVP Openday 1月30日在北京召开,到时全国上百位 MVP 专家将齐聚北京.当然还有亚太的其他国家地区的MVP 也会来北京,1月31日微软 MVP 项目组主办的年度微软技术社区分享大会- ...

随机推荐

  1. 【数据结构与算法Python版学习笔记】图——基本概念及相关术语

    概念 图Graph是比树更为一般的结构, 也是由节点和边构成 实际上树是一种具有特殊性质的图 图可以用来表示现实世界中很多有意思的事物,包括道路系统.城市之间的航班.互联网的连接,甚至是计算机专业的一 ...

  2. 离线状态迁移Anaconda虚拟环境

    离线状态迁移Anaconda虚拟环境 同样是项目需求,需要布署的服务器上的Anaconda安装到了普通账户下 而后续所有的内容都需要通过root账户进行操作,而服务器已经布署,联网比较麻烦 本文提出, ...

  3. MySQL:提高笔记-1

    MySQL:提高笔记-1 学完基础的语法后,进一步对 MySQL 进行学习 说明:这是根据 bilibili 上 黑马程序员 的课程 mysql入门到精通 后做的笔记 1. 索引 1.1 索引概述 M ...

  4. [软工顶级理解组] Alpha阶段测试报告

    [软工顶级理解组] Alpha阶段测试报告 在测试过程中发现了多少Bug? 测试阶段发现并已修复的bug: 尚且存在,但是难以解决或者不影响使用的bug: 计算重修课程的时候,如果重修课程的课程号和原 ...

  5. mongodb的简单查询

    此篇文章简单的记录一下mongodb 的简单查询操作. 一.数据准备: db.persons.insertMany([ {'userId':1,name:'张三','age':20,'scores': ...

  6. Kotlin/Native 用KMM写Flutter插件

    一.用KMM写Flutter插件 Google官方有一个写Flutter例子How to write a Flutter plugin,这里把Google plugin_codelab 例子改成用KM ...

  7. Noip模拟5 2021.6.7

    T1 string(线段树优化) 看到数据范围就必须要想到优化,那么如何把26×M∗N 的复杂度降低呢?? 用到那个我们最不想打的数据结构--线段树...... 然而,这个线段树与往常不同,他只需要用 ...

  8. 攻防世界 杂项 9.a_good_idea

    题目描述: 汤姆有个好主意 解题思路: 首先按照隐写思路找了一下没找到flag,接着使用winhex打开图片,发现图片里面又包含了一张图片,然后马上改了一下后缀为zip, 解压后发现里面有:hint. ...

  9. 洛谷 P4774 [NOI2018] 屠龙勇士

    链接:P4774 前言: 交了18遍最后发现是多组数据没清空/ll 题意: 其实就是个扩中. 分析过程: 首先发现根据题目描述的选择剑的方式,每条龙对应的剑都是固定的,有查询前驱,后继(在该数不存在前 ...

  10. Linux修改bashrc

    .bashrc是一个隐藏的文件,要打开并修改该文件需要: (1) 查看:ll -a 找到文件 .bashrc: (2) 打开:vi .bashrc (或者 vim .bashrc) 打开文件: (3) ...