还差一组AC
易错点·:
1,数组int s[100][100]={5},则只有s[0][0]=5;={0}则全部初始化
2,修改变量时记得把程序中的也改了
3,变量都初始化 ! ! ! !
4,二维数组的字母位置要记清,不要写反! ! !
5,下标会-1,不从0计数
5,下标会-1,不从0计数
#include<iostream>
using namespace std;
int main(){
//先输入地图 /*变量都初始化 ! ! ! ! */
int n,r;
int x,y,v;
int xm=0,ym=0, s1[5010][5010]={0};/*不同组变量分开定义 ! ! */
cin >> n >> r;
for(int i = 0; i < n; i++){//逐个输入值
cin >> x >> y >> v;
s1[x+1][y+1] = v; /*二维数组的字母位置要记清,不要写反! ! !*/
if(xm<x+1)xm=x+1;//求范围
if(ym<y+1)ym=y+1;
}
//求二维前缀和(前i行前j列的和)
//x为横轴,y为竖轴
for(int j=1;j<xm+1;j++){
for(int i=1;i<ym+1;i++){
s1[j][i] = s1[j-1][i] + s1[j][i-1] + s1[j][i] - s1[j-1][i-1];
//cout<<j<<' '<<i<<' '<<s1[j][i]<<endl;
} /*下标会-1,不从0计数*/
}
//遍历求区间值
int now,max=0;
for(int j=r;j<xm+1;j++){//后面行
for(int i=r;i<ym+1;i++){
now = s1[j][i] - s1[j-r][i] - s1[j][i-r] + s1[j-r][i-r];
//cout<<j<<' '<<i<<' '<<now<<endl;
if(max<now)max=now;
}
}
cout<<max;
return 0;
}
书写习惯纠正:
1,不同组变量分开定义 ! ! 不同功能区定义

京公网安备 11010502036488号