UVa 108 - Maximum Sum

来源:互联网 发布:maya展uv软件 编辑:程序博客网 时间:2024/04/28 10:15

传送门UVa 108 - Maximum Sum


题意:计算子矩阵的最大和。


没思路,参考了GooMaple的解题报告。


主要思想就是把和都加到一列上,然后依次求子矩阵的最大值。

如果tempSum的值大于0,就一直加下去,小于0就当前列开始。


#include <cstdio>#include <algorithm>using namespace std;int num[110][110];int main(){    //freopen("input.txt", "r", stdin);    int n, i, j, a, k, maxNum;    scanf("%d", &n);    for (i = 1; i <= n; i++)    {        for (j = 1; j <= n; j++)        {            scanf("%d", &num[i][j]);            num[i][j] += num[i - 1][j];        }    }    maxNum = num[1][1];    for (i = 0; i <= n; i++)        for (j = i + 1; j <= n; j++)        {            int t = 0;            for (k = 1; k <= n; k++)            {                if (t < 0)  //如果计算出来结果是负数,和清零,重新开始计算。                    t = num[j][k] - num[i][k];                else                    t += num[j][k] - num[i][k]; //不然的话就加上那一列的和                if (t > maxNum && t != 0)                    maxNum = t;            }        }    printf("%d\n", maxNum);    return 0;}




0 0