上次学了一维的,这次来学二维前缀和

先看上一章学习了一维前缀和之后再来学习吧,不然小小玖你会不懂的。

首先你必须还要学会二维数组,才能进行下去哦!!

先来小小讲讲二维数组

如果把一维数组看作线

i01234
a[i]2-492387

二维数组就是面

123456
1b[1][1]................
2b[1][2]b[2][2]...b[2][4].......
3..................
4............b[4][5]...
5......b[5][3].......b[5][6]

就像坐标一样定位。

下面进行二位前缀和的讲解:

首先在求和顺序上,看上面的那张表格,只有求完一行上的数之后,才能进行下一行的计算。

我们要求前缀和时,如果仿照求一维的那样,(i与j都在循环)sum[i][j]=sum[i][j-1]+a[i][j],就错了,你想想当处于两行交换之时,该式子就不成立了。

所以,我们另想办法;

用b[2][2]+b[2][3]+b[3][2]+b[3][3]+b[4][2]+b[4][3]之和   加上   b[2][2]+b[2][3]+b[2][4]+b[3][2]+b[3][3]+b[3][4]之和   减去   b[2][2]+b[2][3]+b[3][2]+b[3][3]之和   加上   a[4][4];

总结下来就是:

sum[i][j]=sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1]+a[i][j]

我们求某个区间内的和时:

例如:看上面的3*3的绿色字体方框,计算机计算的顺序为s=b[2][2]+b[2][3]+b[2][4]+b[3][2]+b[3][3]+b[3][4]+b[4][2]+b[4][3]+b[4][4];

总结下来就是:s=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];(理解与求前缀和相同)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值