标签:
#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX 1000int MaxSubInterval(int a[], int n) //标准的一维最大子段和{int sum = 0, tp = 0;for(int i=0; i<n; i++){if(tp > 0)tp += a[i];elsetp = a[i];if(sum < tp)sum = tp;}return sum;}int MaxSubMartix(int a[][MAX], int m, int n) //二维最大子段和问题{int tp[MAX], sum = 0;for(int i=0; i<m; i++){memset(tp, 0, sizeof(tp) );for(int j=i; j<m; j++){for(int k=0; k<n; k++)tp[k] += a[j][k];int max = MaxSubInterval(tp, n);if(max > sum) sum = max;}}return sum;}/*int MaxSubInterval(int a[], int n, int size_y) //一维的n个数的最大子段和{int sum = 0, tp;for(int i=0; i<n-size_y; i++){tp = 0;for(int j=i; j<i+size_y; j++){if(tp > 0)tp += a[j];elsetp = a[j];}if(sum < tp)sum = tp;}return sum;}int MaxSubMartix(int a[][MAX], int m, int n, int size_x, int size_y) //二维size_x * size_y 个数的最大子段和{int tp[MAX], sum = 0;for(int i=0; i<m-size_x; i++){memset(tp, 0, sizeof(tp) );for(int j=i; j<i+size_x; j++){for(int k=0; k<n; k++)tp[k] += a[j][k];}int max = MaxSubInterval(tp, n, size_y);if(max > sum) sum = max;}return sum;}*/
标签:
原文地址:http://www.cnblogs.com/sober-reflection/p/61b4f77e8e98092b5ec2d10a54d04c9e.html