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;}