#include <stdio.h>
#include <stdlib.h>
int MaxSum(int *A, int n)
{
int maximum = -32566;
int sum, i, j, k;
for(i = 0; i < n; i++)
{
for(j = i; j < n; j++)
{
for(k = i; k <= j; k++)
{
sum += A[k];
}
if(sum > maximum)
{
maximum = sum;
}
}
}
return maximum;
}
int MaxSum2(int *A, int n)
{
int maximum = -32566;
int sum, i, j;
for(i = 0; i < n; i++)
{
sum = 0;
for(j = i; j < n; j++)
{
sum += A[j];
if(sum > maximum)
{
maximum = sum;
}
}
}
return maximum;
}
int max(int x, int y)
{
return (x > y) ? x : y;
}
int MaxSum3(int *A, int n)
{
int i, nStart, nAll;
nStart = A[n - 1];
nAll = A[n - 1];
for(i = n - 2; i >= 0; i--)
{
nStart = max(A[i], nStart + A[i]);
nAll = max(nStart, nAll);
}
return nAll;
}
int main()
{
int A[6] = {1, -2, 3, 5, -3, 2};
int sum = MaxSum3(A, 6);
printf("sum = %d", sum);
return 0;
}
#include <stdlib.h>
int MaxSum(int *A, int n)
{
int maximum = -32566;
int sum, i, j, k;
for(i = 0; i < n; i++)
{
for(j = i; j < n; j++)
{
for(k = i; k <= j; k++)
{
sum += A[k];
}
if(sum > maximum)
{
maximum = sum;
}
}
}
return maximum;
}
int MaxSum2(int *A, int n)
{
int maximum = -32566;
int sum, i, j;
for(i = 0; i < n; i++)
{
sum = 0;
for(j = i; j < n; j++)
{
sum += A[j];
if(sum > maximum)
{
maximum = sum;
}
}
}
return maximum;
}
int max(int x, int y)
{
return (x > y) ? x : y;
}
int MaxSum3(int *A, int n)
{
int i, nStart, nAll;
nStart = A[n - 1];
nAll = A[n - 1];
for(i = n - 2; i >= 0; i--)
{
nStart = max(A[i], nStart + A[i]);
nAll = max(nStart, nAll);
}
return nAll;
}
int main()
{
int A[6] = {1, -2, 3, 5, -3, 2};
int sum = MaxSum3(A, 6);
printf("sum = %d", sum);
return 0;
}