经过了一维前缀和的学习,我们可以踏入二维的阶段了,哼哼~,现在才是真正的技术
二维前缀和,顾名思义,就是存储在二维数组的前缀和,一维前缀和是从a[1]加到a[i],那二维前缀和就是从a[1][1]加到a[i][j]了。
二维前缀和前缀和看似很简单,但你看到那一行的代码可能会晕(是可能),我们可以先看图
一个表格a,里面封印着每个格子的值,叫你搞出它每个格子的前缀和,那就得知道二维前缀和咋算
前面讲过了,二为前缀和就是以a[i][j]为左下角,以a[1][1]为左上角,将这个子矩阵里面所有的值加起来就得到了b[i][j]
从一维前缀和的学习中我们知道了一个道理:
“不要老暴力,否则被雷劈”
没错,不要暴力,会TLE,咋办捏?
欸,如果我们一行一行的求的话,那在求b[i][j]时一定已经把b[i-1][j]和b[i][j-1](b[i][j]的上方和左边)求出来了,说不定b[i-1][j]和b[i][j-1]就是个突破口
我们来画个图:
这不出来了吗?再加上a[i][j]就……不对,有个地方多加了:
简单咯,减一下b[i-1][j-1]就完了
那么,我们总结个公式:<