版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lingzidong/article/details/81905153
问题引入:
第i个位置上的数字变成了1,求整个数组求k次前缀和之后,j位置上的前缀和
问题推导
我们先把可能发生了什么列出来
假设我们在位置i添加了w,现在要查询j位置,现在一次前缀和操作都没有进行,矩阵的第一列代表i位置,最后一列代表j位置
$$
$$
一开始肯定什么都没有发生,我们现在直接让他加3次
其实我们直接把w都去掉,发现只是一个系数矩阵,好像还有点对称???
我们接着可以发现,这个矩阵,就标记为A,满足一个性质
可以理解为一个矩阵的上的系数等于左边加上头上的系数。这个很好理解嘛,上边的数相当于这个位置以前的值,左边的数相当于是新的前缀和。
但是,但是,但是。我们是不是可以将这个看成一个DP数组呢?看成dp数组的话,从递推式就是从矩阵左上角开始,只能朝右或者朝下走,有多少种走法。正好对应了这个式子。
这个路径问题,我们就可以用组合数来求解了,我们就将目标转移到矩阵的右下角
,那么走到这里肯定走了
步,我们就从这里面选出k步朝下走,剩下的就不用写了,也就是说这个答案等于:
Oh yeah~问题解决了,只要把w乘上去,问题就变成了组合数问题了。
如果查询的j在i前面?当然对答案没有影响了。
扫描二维码关注公众号,回复:
3358480 查看本文章
之后更新那两道题……