还差一组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,不同组变量分开定义 ! ! 不同功能区定义