标签:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
int MaxSubInterval(int a[], int n) //标准的一维最大子段和
{
int sum = 0, tp = 0;
for(int i=0; i<n; i++)
{
if(tp > 0)
tp += a[i];
else
tp = 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];
else
tp = 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