题目传送:走你~
题意简介:给定一个xXy的矩阵,从中找一个mXn的矩阵。
分析:i * j的矩阵内的数的和:
所以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;
}