您的位置:首页 > 其它

UVA - 108 Maximum Sum

2014-10-23 20:27 162 查看
题意大意:给出 n*n 的矩阵,求出里面子矩阵的和的最大值

解题思路:这题是最大连续子序列的应用,序列是一维的,矩阵是二维的,所以我们可以把矩阵转换为一维的来算,

也就是枚举矩阵的连续几行的合并,这样就转换为一维的了,再用最大子序列的算法去求,更新最大值就可以了

#include <cstdio>
#include <cstring>

int main() {
int N, A[105][105], T[105], MAX = -128;
scanf("%d", &N);

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++) {
memset(T, 0, sizeof(T));
for (int j = i; j < N; j++) {
int sum = 0;
for (int k = 0; k < N; k++) {
T[k] += A[j][k];
sum >= 0 ? sum += T[k] : sum = T[k];
if (sum > MAX)
MAX = sum;
}
}
}
printf("%d\n", MAX);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: