题目的意思,求矩阵的的子矩阵的最大和。
暴力枚举行的组合,将各列数值相加,再查找最大连续和,更新最大值即可。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 110;
int data[maxn][maxn], n;
int main()
{
// freopen("1.txt", "r", stdin);
int i, j, k;
while(cin >> n)
{
int Max = -0xfffffff;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
scanf("%d", &data[i][j]);
int ans[maxn];
for(i = 0; i < n; i++)
{
for(j = i; j < n; j++)
{
memset(ans, 0, sizeof(ans));
for(k = i; k <= j; k++)//第i行到第j行相加
{
for(int l = 0; l < n; l++)
ans[l] += data[k][l];
}
//dp更新最大值
for(k = 0; k < n; k++)
{
int sum = 0;
for(int l = k; l < n; l++)
{
sum += ans[l];
Max = sum > Max ? sum : Max;
}
}
}
}
cout << Max << endl;
}
return 0;
}