题意:求最小的子矩阵和,是uva 507 的一个加深吧,从一维变成了二微,那么我们就转化为一维的,每一列的数,可以组成连续的子序列,然后将这个子序列当成一个元素,其它列同样如此,就可以转化为一维的了
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 123;
int a[MAXN][MAXN],b[MAXN],n,sum,Max;
int main()
{
scanf("%d",&n);
Max = -123456;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
scanf("%d",&a[i][j]);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++) //存着这一列的和
b[j] = 0;
for (int j = i; j < n; j++)
{
sum = 0;
for (int l = 0; l < n; l++)
{
b[l] += a[j][l];
if (sum >= 0)
sum += b[l];
else sum = b[l]; //找到了这次序列的最大值了
if (sum > Max)
Max = sum;
}
}
}
printf("%d\n",Max);
return 0;
}