POJ1050&HDU1081-To the Max

来源:互联网 发布:微信加人软件 编辑:程序博客网 时间:2024/05/30 04:40

从一个矩阵中寻找和最大的子矩阵,简单的枚举各种情况即可。
数组a表示原矩阵,b表示a中的某几行之和组成的新序列,这样就转换为求新序列的最大连续子序列的和问题了。
在杭电上提交时数据改为多组输入….

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 100 + 5;int a[maxn][maxn];int b[maxn];int calc(int n) {    int sum,max_sum;    sum = max_sum = 0;    for (int i = 0; i < n; i++) {        sum += b[i];        if (sum > max_sum) {            max_sum = sum;        } else if (sum < 0) {            sum = 0;        }    }    return max_sum;}int main(int argc, char const *argv[]) {    int n;    scanf("%d", &n);    for (int i = 0; i < n; i++) {        for (int j = 0; j < n; j++) {            scanf("%d", &a[i][j]);        }    }    int max_sum = 0;    for (int i = 0; i < n; i++) {        memset(b, 0, sizeof(b));        for (int j = i; j < n; j++) {            for (int k = 0; k < n; k++) {                b[k] += a[j][k];            }            max_sum = max(max_sum, calc(n));        }    }    printf("%d\n", max_sum);    return 0;}
0 0
原创粉丝点击