码迷,mamicode.com
首页 > 编程语言 > 详细

二维数组前缀和

时间:2019-08-11 00:57:26      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:token   一个   输入   prism   func   key   ret   元素   png   

给定一个矩阵,求子矩阵元素之和。

可以暴力遍历,但是一般题目时间上不会允许你这么做。

通过预处理二维数组使得需要子矩阵之和时以O(1)直接求。

输入:

for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin >>map[i][j];

技术图片

 

记dp[i][j]表示左上坐标(1,1),右下坐标(i,j)的子矩阵,map[i][j]表示矩阵(i,j)位置上的元素。

那么通过:dp[i][j]=dp[i][j-1]+dp[i-1][j]-dp[i-1][j-1]+map[i][j] 来预处理矩阵

code:

memset(dp,0,sizeof(dp));
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+map[i][j];

那么左上坐标(x1,y1),右下坐标(x2,y2)的子矩阵之和为:dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1]

code:

for(int i=1;i<=k;i++)
    {
        int x1,x2,y1,y2;
        cin >>x1>>y1>>x2>>y2;
        cout <<(dp[x2][y2]+dp[x1-1][y1-1]-dp[x1-1][y2]-dp[x2][y1-1])<<endl;
    }

 

二维数组前缀和

标签:token   一个   输入   prism   func   key   ret   元素   png   

原文地址:https://www.cnblogs.com/cautx/p/11333373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!