Problem Description
给定一个 n×m 的矩阵A,求 A 中的一个非空子矩阵,使这个子矩阵中的元素和最大。其中,A 的子矩阵指在 A 中行和列均连续的一部分。
Input
输入的第一行包含两个整数 n,m(1≤n,m≤50),分别表示矩阵 A 的行数和列数。接下来 n 行,每行 m 个整数,表示矩阵 A i,j(−1000≤Ai,j≤1000)。
Output
输出一行,包含一个整数,表示 AA 中最大的子矩阵中的元素和。
样例输入
Sample Input
3 3
2 -4 1
-1 2 1
4 -2 2
Sample Output
6
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[51][51],ans,sum,i,ti,tj,ii,jj,j,n,m;
ans=-1000000;
scanf("%d %d",&n,&m);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
for(ti=i; ti<n; ti++)
{
for(tj=j; tj<m; tj++) //枚举子集
{
sum=0;
for(ii=i; ii<=ti; ii++)
{
for(jj=j; jj<=tj; jj++)
{
sum+=a[ii][jj];
}
if(ans<sum)
ans=sum;
}
}
}
}
}
printf("%d\n",ans);
return 0;
}
这是个暴力枚举哈,我也没交题测试,挺暴力的,不知道会不会超时