AcWing <796. 子矩阵的和>

简介: 二维前缀和总结

image.png

之前讲了一维层面的前缀和数组,这次来讲讲二维的前缀和数组。而每一个位置都表示从起点开始到当前位置之内所有数的和。

image.png

我们也很容易观察到,若我们想要对其进行初始化只需要,用上部分的和加上左部分的和,由于中间部分算了两次由此需要扣掉一次,即s[i,j] = a[i, j] + s[i, j-1] + s[i-1, j] - s[i-1, j-1]。

image.png

初始化之后要求子矩阵的和就只需要用红色部分减去两个绿色的部分,最后把重复减去的部分再加回来就可以了。即 s [x1y1,x2y2] = s[x2,y2] - s[x2,y1-1] - s[x1-1,y2] + s[x1-1,y1-1]

image.png

最后上代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
int a[N][N], s[N][N];
int n, m, q;
int main()
{
  scanf("%d%d%d", &n, &m, &q);
  for (int i = 1; i <= n; i++)
  {
    for (int j = 1; j <= m; j++)
    {
      scanf("%d", &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;
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);  //求子矩阵的和
    printf("%d\n", s[x2][y2] - s[x2][y1 - 1] - s[x1 - 1][y2] + s[x1 - 1][y1 - 1]);
  }
  return 0;
}

image.gif

目录
打赏
0
0
0
0
55
分享
相关文章
|
11月前
|
C++
【PTA】​L1-048 矩阵A乘以B​ (C++)
【PTA】​L1-048 矩阵A乘以B​ (C++)
106 0
【PTA】​L1-048 矩阵A乘以B​ (C++)
【LeetCode】BM1 反转链表、NC21 链表内指定区间反转
BM1 反转链表 描述: 给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
78 0
(二维vector)(绝对值求和等式的处理)B. Playing in a Casino
(二维vector)(绝对值求和等式的处理)B. Playing in a Casino
109 0
【欧拉计划第 8 题】序列中最大的乘积 Largest product in a series
【欧拉计划第 8 题】序列中最大的乘积 Largest product in a series
162 0
【欧拉计划第 8 题】序列中最大的乘积 Largest product in a series
矩阵的初等变换和等价
矩阵的初等变换和等价
340 0
矩阵转置(mooc)用户输入矩阵阶数,然后按行输入所有矩阵元素(整数),将该矩阵转置输出。阶数应是[1,5]之间的整数,不在该区间时,显示“matrix order error”。
矩阵转置(mooc)用户输入矩阵阶数,然后按行输入所有矩阵元素(整数),将该矩阵转置输出。阶数应是[1,5]之间的整数,不在该区间时,显示“matrix order error”。
131 0
UPC Go Home(贪心 || 前缀和+二分)(STL二分函数的使用)
UPC Go Home(贪心 || 前缀和+二分)(STL二分函数的使用)
106 0
利用动态规划算法解01背包问题-&gt;二维数组传参-&gt;cpp内存管理-&gt;堆和栈的区别-&gt;常见的内存错误及其对策-&gt;指针和数组的区别-&gt;32位系统是4G
1、利用动态规划算法解01背包问题 https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html 两层for循环,依次考察当前石块是否能放入背包。
1342 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等