您的位置:首页 > 其它

Uva108——Maximum Sum

2016-03-10 14:46 330 查看
题目的意思,求矩阵的的子矩阵的最大和。

暴力枚举行的组合,将各列数值相加,再查找最大连续和,更新最大值即可。

代码:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: