欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}

相关标签: PIPIOJ