PIPIOJ 1041: 最大子矩阵 前缀和
程序员文章站
2022-04-01 17:28:30
...
题目:
http://39.106.164.46/problem.php?id=1041
代码如下:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<cmath>
#include<queue>
#include<cstring>
#include<vector>
#include<stack>
#include<map>
#include<set>
#define MAX 1005
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,m,x,y;
int a[MAX][MAX],sum[MAX][MAX];
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(sum,0,sizeof(sum));
scanf("%d %d %d %d",&m,&n,&x,&y);
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a[i][j]);
sum[i][j]=sum[i][j-1]+a[i][j];
}
}
int ans=-1;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
int xx=i+x-1,yy=j+y-1;
if(xx<=m&&yy<=n){
int tmp=0;
for(int k=i;k<=xx;k++){
tmp+=sum[k][yy]-sum[k][j-1];
}
ans=max(ans,tmp);
}
}
}
printf("%d\n",ans);
}
return 0;
}