之前写的前缀和 矩阵之和等 用的都是两个数组
这个题使用两个数组 会内存超限 超出题目所给的
这种题一个数组也可以做 之前的题我用一个数组试过了 可以过
#include<bits/stdc++.h>
using namespace std;
int s[5020][5020];
int main(){
int n,m,i1,j1,res=0;cin>>n>>m;i1=j1=m;
while(n--){
int a,b,c;cin>>a>>b>>c;
a++,b++;i1=max(i1,a),j1=max(j1,b);
s[a][b]=c;
}
for(int i=1;i<=i1;i++)
for(int j=1;j<=j1;j++)
s[i][j]=s[i][j]+s[i-1][j]+s[i][j-1]-s[i-1][j-1];
// for(int i=1;i<=i1;i++) //这是为了看看s是否还是矩阵前缀和
// {for(int j=1;j<=j1;j++)
// cout<<s[i][j];
// cout<<endl;
// }
for(int i=m;i<=i1;i++)
for(int j=m;j<=j1;j++)
res=max(res,s[i][j]+s[i-m][j-m]-s[i-m][j]-s[i][j-m]);
cout<<res;
return 0;
}