作业介绍
一维前缀和复习+二维前缀和
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1010][1010],s[1010][1010],x,y;
//要求快速计算a数组 下标L到下标R这段范围的区间和
// 前缀和数组 s[i]: a数组前i项的总和是s[i]
// s[i]=s[i-1]+a[i];
// 有了这个前缀和数组之后,我们就可以快速计算区间和了
// s[R]-s[L-1];
//二维前缀和
//s[i][j]:a数组前i行 前j列的总和 是s[i][j]
//s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a[i][j]
//1 3 2 1 1 1
//利用二维前缀和数组 帮我们计算 二维数组里面某一段范围的总和
//我们现在想计算二维数组当中一个小矩形的总和
//这个小矩形 左上角坐标是 (x,y) 右下角坐标是 (xx,yy)
//s[xx][yy]-s[xx][y-1]-s[x-1][yy]+s[x-1][y-1]
//如何枚举二维数组当中的每一个小矩形???
//只需要枚举左上角的行坐标 左上角的列坐标
//右下角的行坐标 右下角的列坐标 需要注意 右下角的行坐标>=左上角的行坐标
//右下角的列坐标>=左上角的列坐标
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a[i][j];
}
}
while(cin>>x>>y){
cout<<"X: "<<x<<" Y: "<<y<<" 总和是: "<<s[x][y]<<endl;
}
return 0;
}
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 18
- 开始时间
- 2026-1-31 0:00
- 截止时间
- 2026-3-31 23:59
- 可延期
- 24 小时