题目传送:走你~

题意简介:给定一个xXy的矩阵,从中找一个mXn的矩阵。

分析:i * j的矩阵内的数的和:

H - 最大子矩阵 HDU - 1559(动态规划)

所以sum[i][j] = a[i][j] + sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];

同理可推:i * j 矩阵中 m * n 的矩阵和为sum[i][j] - sum[i - m][j] - sum[i][j - n] + sum[i - m][j - n];

AC代码:

#include<bits/stdc++.h>
using namespace std;

int t, m, n, x, y, sum[1100][1100];
int main()
{
    scanf("%d", &t);
    while(t--)
    {
        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", &sum[i][j]);
                sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
            }
        }

        int MAX = -1;
        for(int i = 1; i <= m; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(i >= x && j >= y)
                    MAX = max(MAX, sum[i][j] - sum[i - x][j] - sum[i][j - y] + sum[i - x][j - y]);
            }
        }
        printf("%d\n", MAX);
    }
    return 0;
}

 

相关文章: