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;
}
解题思路:这题是最大连续子序列的应用,序列是一维的,矩阵是二维的,所以我们可以把矩阵转换为一维的来算,
也就是枚举矩阵的连续几行的合并,这样就转换为一维的了,再用最大子序列的算法去求,更新最大值就可以了
#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;
}
相关文章推荐
- UVA 108 Maximum Sum
- UVa 108 - Maximum Sum
- Uva 108 Maximum Sum
- UVA - 108 Maximum Sum(子矩阵最大和)
- uva108 Maximum Sum--数组动态规划的题的方法!!
- UVA - 108 Maximum Sum
- uva 108 Maximum Sum
- UVA 108 - Maximum Sum
- UVA - 108 Maximum Sum
- UVa 108 - Maximum Sum (最大子矩阵)
- Uva108——Maximum Sum
- UVA 108 Maximum Sum
- UVa 108 - Maximum Sum
- uva108 Maximum sum(矩阵最大和)
- UVa 108 Maximum Sum (经典问题转化)
- Uva 108 Maximum Sum
- UVA108 - Maximum Sum(最大连续和)
- UVa 108 - Maximum Sum(最大连续子序列)
- [动态规划]UVA108 - Maximum Sum
- UVa 108 - Maximum Sum