UVA
来源:互联网 发布:好运通超市软件 编辑:程序博客网 时间:2024/06/06 03:38
UVA - 108 Maximum Sum(子矩阵最大和) 升级版
题目大意:和 UVA - 108 差不多,不同在于可以把此题想象成球面,不设边界。
解题思路:把边界拓展一下,四个矩阵拼在一起,就可以枚举出所有情况。注意控制一下子矩阵的大小 N×N。
#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<string.h>const int INF = 0x3f3f3f3f;const int NINF = -INF -1;using namespace std;int val[310][310];int sum[310];int T, N;int main() { scanf("%d", &T); while (T--) { scanf("%d", &N); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) { scanf("%d", &val[i][j]); val[i+N][j] = val[i][j+N] = val[i+N][j+N] = val[i][j]; } int maxn = NINF; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { memset(sum, 0, sizeof(sum)); for (int k = i; k < i+N; k++) { int tmp = 0; for (int l = j; l < j+N; l++) { sum[l] += val[k][l]; if (tmp < 0) { tmp = 0; } tmp += sum[l]; if (tmp > maxn) { maxn = tmp; } } } } } printf("%d\n", maxn); }return 0;}