想用二维前缀和,之后枚举首都左上角坐标,结果惨烈爆28。555555
#include <bits/stdc++.h>
using namespace std;
int a[1010][1010]={0},dp[1010][1010]={0};
int main(){
int n,m,c,ma=INT_MIN,x,y;
cin >> n >> m >> c;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+a[i][j];
}
}
for(int x1=1;x1<=n-c+1;x1++){
for(int y1=1;y1<=m-c+1;y1++){
int x2=x1+c-1;
int y2=y1+c-1;
int lc=dp[x2][y2]-dp[x2][y1]-dp[x1][y2]+dp[x1][y1];
if(lc>ma){
ma=lc;
x=x1;
y=y1;
}
}
}
cout << x << ' ' << y;
return 0;
}