从前缀和到组合数——2018多校题目知识点析取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lingzidong/article/details/81905153

问题引入:

第i个位置上的数字变成了1,求整个数组求k次前缀和之后,j位置上的前缀和

问题推导

我们先把可能发生了什么列出来
假设我们在位置i添加了w,现在要查询j位置,现在一次前缀和操作都没有进行,矩阵的第一列代表i位置,最后一列代表j位置
$$

w 0 0 0

$$

一开始肯定什么都没有发生,我们现在直接让他加3次

w 0 0 0 w w w w w 2 w 3 w 4 w w 3 w 6 w 10 w w 4 w 10 w 20 w

其实我们直接把w都去掉,发现只是一个系数矩阵,好像还有点对称???
我们接着可以发现,这个矩阵,就标记为A,满足一个性质

A i j = A i 1 , j + A i , j 1

可以理解为一个矩阵的上的系数等于左边加上头上的系数。这个很好理解嘛,上边的数相当于这个位置以前的值,左边的数相当于是新的前缀和。

但是,但是,但是。我们是不是可以将这个看成一个DP数组呢?看成dp数组的话,从递推式就是从矩阵左上角开始,只能朝右或者朝下走,有多少种走法。正好对应了这个式子。
这个路径问题,我们就可以用组合数来求解了,我们就将目标转移到矩阵的右下角 A k , j i ,那么走到这里肯定走了 k + j i 步,我们就从这里面选出k步朝下走,剩下的就不用写了,也就是说这个答案等于:

( k + j i k )

Oh yeah~问题解决了,只要把w乘上去,问题就变成了组合数问题了。
如果查询的j在i前面?当然对答案没有影响了。

扫描二维码关注公众号,回复: 3358480 查看本文章

之后更新那两道题……

猜你喜欢

转载自blog.csdn.net/lingzidong/article/details/81905153