思路:二维数组的前缀和,用这个做很快的~
#include <iostream>
#include <cstring>
using namespace std;
typedef long long int ll;
#define Max 1001
ll a[Max][Max];
ll matrix[Max][Max];
ll sum[Max][Max];
ll M=-999999;
int main()
{
ll n,m,L;
ll Max_i=-1,Max_j=-1;
cin>>n>>m>>L;
memset(matrix,0, sizeof(matrix));
memset(sum,0, sizeof(sum));
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
cin>>a[i][j];
matrix[i][j]=matrix[i][j-1]+a[i][j];
sum[i][j]=sum[i-1][j]+matrix[i][j];
}
}
for(ll x1=1;x1<=n;x1++) //x1 y1代表左上角的坐标
{
for(ll y1=1;y1<=m;y1++)
{
ll x2=x1+L-1;
ll y2=y1+L-1;
if(x2>n||y2>m)
{
continue;
}
ll t=sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
if(M<t)
{
M=t;
Max_i=x1;
Max_j=y1;
}
}
}
cout<<Max_i<<" "<<Max_j;
return 0;
}