//============================================================================
//
// > File : poj1050.cpp
// > Author : flowertree
// > Time : 2015年11月16日
// > Algorithm : 最大和子矩阵 最大子段和
// 枚举每一行 把每一列加起来 按照一维的解
//
//============================================================================
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;
#define MAX 105
#define INFINITY -20000
int map[MAX][MAX];
int main()
{
int max = INFINITY;
int a[MAX];
int temp;
int n;
cin >> n;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
cin >> map[i][j];
}
for(int i = 0; i < n; i++)
{
for(int t = i; t < n; t++)
{
memset(a, 0, sizeof(a));
temp = 0;
for(int j = 0; j < n; j++)
{
for(int k = i; k <= t; k++)
{
a[j] += map[k][j];
}
if(temp + a[j] >= 0)
{
temp += a[j];
if(temp > max)
max = temp;
}
else
{
temp = 0;
}
}
}
}
cout << max << endl;
system("pause");
return 0;
}
poj 1050 最大子矩阵和
最新推荐文章于 2021-11-28 22:09:40 发布