牛客数据结构专题班WeekⅠ 前缀和练习

前缀和,狭义的理解是 f [ n ] = ∑ i = 1 n g [ i ] f[n]= \sum_{i=1}^{n}g[i] f[n]=i=1ng[i]这样一个把前面所有的值都加起来的一种操作,方便区间和进行查询,但是通过进一步的了解,前缀和可以用来表示前面的操作都进行完,之后通过某种操作消除前面某一段的影响,进而求得某段区间操作之后的总影响。

这样干说似乎有点抽象,借助第一场的几个题来进一步讲一下,也当作改题的一篇blog吧
AC个数:9/10
传送门
过于简单的就不写了,反正我会的我队友肯定都会

  1. 矩阵乘法优化dp(在数据结构课上你甚至可以写dp )
    题意
    我们首先考虑如果这是一道dp,不是那么多次询问怎么做呢?
    很容易得出以下的状态转移方程:
    d p [ i ] [ 0 ] = d p [ i − 1 ] [ 0 ] + d p [ i − 1 ] [ 1 ] d p [ i ] [ 1 ] = d p [ i − 1 ] [ 1 ] + d p [ i − 1 ] [ 0 ] dp[i][0]=dp[i-1][0]+dp[i-1][1]\\ dp[i][1]=dp[i-1][1]+dp[i-1][0] dp[i][0]=dp[i1][0]+dp[i1][1]dp[i][1]=dp[i1][1]+dp[i1][0]
    如果有一种从左面的楼到右面的楼的楼梯,那么第一个式子的后一项就有,第二个式子同理,但这题有多组询问,我们观察上面的状态转移方程:这个是一个矩阵的形式:如果有一个从左到右的楼梯的话,可以化成以下的矩阵
    [ 1 1 0 1 ] \begin{bmatrix} 1 & 1\\ 0 & 1 \end{bmatrix} [1011]
    同理,如果存在一个从右到左的楼梯,那么可以化成以下的矩阵
    [ 1 0 1 1 ] \begin{bmatrix} 1 & 0\\ 1 & 1 \end{bmatrix} [1101]其中,这里的矩阵每个元素代表的意思分别为 f [ 0 ] [ 0 ] 代 表 从 左 面 到 左 面 f [ 0 ] [ 1 ] 代 表 从 左 面 到 右 面 f [ 1 ] [ 0 ] 代 表 从 左 面 到 右 面 f [ 1 ] [ 1 ] 代 表 从 右 面 到 右 面 f[0][0]代表从左面到左面\\f[0][1]代表从左面到右面\\f[1][0]代表从左面到右面\\f[1][1]代表从右面到右面 f[0][0]f[0][1]f[1][0]f[1][1]
    的方案数。之后可以利用前缀和的思想,把每个询问变成l逆矩阵乘以r的状态即可。
    代码如下:
    代码

2.前缀和的trick应用
题目:传送门
这个题看起来和前缀和没有任何关系,但是我们换一种想法,你对于l,r的操作,其实就是
让前l次操作变成0-9,这就是相当于一个映射,代码如下:
代码

3.前缀和与数学的结合:
前置数学知识点:最高次项为n次的多项式进行n+1次差分之后值为常数。
题目:传送门
如果暴力加入会必然超时的,但如果我们做差分,通过差分数组相加,那么时间将会非常优秀。代码如下:
代码
注意最后前缀和相减的时候需要注意一下矩阵乘法的顺序。

4.前缀和的数学贡献推导:
挖坑,yh给我讲完正解了,但实现得用NTT,学完NTT来补这道题呜呜

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值