如题,在枚举正方形左上角时,如果加上
if(i+k-1>n2||j+k-1>m2) break;
这句话,就会WA on test 8。
按理来说矩阵内都是正数,右下角超过矩阵范围应该不会更优了,但是事实却不是这样,求大佬解答。
注:(n1,m1)表示整个矩阵的左上角,(n2,m2)表示整个矩阵的右下角。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=5e3+5;
int read()
{
int x=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while('0'<=c&&c<='9')
{
x=(x<<3)+(x<<1)+c-'0';
c=getchar();
}
return x;
}
int n1=maxn,m1=maxn,n2,m2,ans;
int s[maxn][maxn];
int main()
{
int num=read(),k=read();
while(num--)
{
int x=read()+1,y=read()+1;
n1=min(n1,x),m1=min(m1,y);
n2=max(n2,x),m2=max(m2,y);
s[x][y]=read();
}
for(int i=n1;i<=n2;i++)
for(int j=m1;j<=m2;j++)
s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
for(int i=n1;i<=n2;i++)
for(int j=m1;j<=m2;j++)
{
//if(i+k-1>n2||j+k-1>m2) break;
int x1=i,x2=min(n2,i+k-1);
int y1=j,y2=min(m2,j+k-1);
ans=max(ans,s[x2][y2]-s[x2][y1-1]-s[x1-1][y2]+s[x1-1][y1-1]);
}
printf("%d",ans);
return 0;
}