<算法学习> 前缀和 二维 (y总思路)

二维是针对于二维数组的 ,这和小学学的求阴影部分面积一样,  数学思路简单  具体要落实到代码实现

重要思路: 

1. 和一维的思路一样(具体看我主页里的一维前缀和)  都是先初始化前缀和

2.用小学求阴影部分的面积就完了

例如:

3. 类比这张图 给他换成二维数组  就能很轻易地得到

前缀和公式        s[i][j] = s[i-1][j] +s[i][j-1]-s[i-1][j-1]+a[i][j];   

(这里由于我还在用十年前的破电脑,奇数层面不够,画不出来详细的图,对不起了,大家可以在纸上自己画画看) 

s【x】【y】我们就当作是从 数组左上角到   x,y 这个点内所有数的和    也能看成面积

4. 求某个二位数组里某个范围内的所有数的和      画图能得到公式 

s[x2][y2]-s[x1-1][y2] - s[x2][y1-1] +s[x1-1][y1-1];

代码实现:

#include<bits/stdc++.h> 
using namespace std;
const int N = 1010;
int a[N][N],s[N][N];
int n,m,q;

int main (void)
{
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			s[i][j] = s[i-1][j] +s[i][j-1]-s[i-1][j-1]+a[i][j];
		}
	}
	while(q--)
	{
		int x1,y1,x2,y2;
		cin>>x1>>y1>>x2>>y2;
		
		cout<<s[x2][y2]-s[x1-1][y2] - s[x2][y1-1] +s[x1-1][y1-1];
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值