MAXIMUM SUBSEQUENCE SUM PROBLEM:
#include <stdio.h>//算法一,运行时间为O(N3)int MaxSubsequenceSum(const int A[], int N){ int ThisSum, MaxSum = 0, i, j, k; for (i = 0; i < N; i++) for (j = i; j < N; j++) { ThisSum = 0; for (k = i; k <= j; k++) ThisSum += A[k]; if (ThisSum > MaxSum) MaxSum = ThisSum; } return MaxSum;}//算法二,运行时间为(N2)int MaxSubSequenceSum(const int A[], int N){ int ThisSum, MaxSum = 0, i, j; for (i = 0; i < N; i++) { ThisSum = 0; for (j = i; j < N; j++) { ThisSum += A[j]; if (ThisSum > MaxSum) MaxSum = ThisSum; } } return MaxSum;}//算法三,运行时间为O(Nlog(N))int Max3(int a, int b, int c){ if (a > b) if (a > c) return a; else return c; else if (b > c) return b; else return c;}static int MaxSubSum(const int A[], int Left, int Right){ int MaxLeftSum, MaxRightSum; int MaxLeftBorderSum = 0, MaxRightBorderSum = 0; int LeftBorderSum = 0, RightBorderSum = 0; int Center, i; if (Left == Right) /*Base Case*/ if (A[Left] > 0) return A[Left]; else return 0; Center = (Left + Right) / 2; MaxLeftSum = MaxSubSum(A, Left, Center); MaxRightSum = MaxSubSum(A, Center + 1, Right); for (i = Center; i >= Left; i--) { LeftBorderSum += A[i]; if (LeftBorderSum > MaxLeftBorderSum) MaxLeftBorderSum = LeftBorderSum; } for (i = Center + 1; i <= Right; i++) { RightBorderSum += A[i]; if (RightBorderSum > MaxRightBorderSum) MaxRightBorderSum = RightBorderSum; } return Max3(MaxLeftSum, MaxRightSum, MaxLeftBorderSum + MaxRightBorderSum);}//算法四,运行时间为O(N)int MaxSubSequence(const int A[], int N){ int ThisSum = 0, MaxSum = 0, j; for (j = 0; j < N; j++) { ThisSum += A[j]; if (ThisSum > MaxSum) MaxSum = ThisSum; else if (ThisSum < 0) ThisSum = 0; } return MaxSum;}int main(){ int N, A[100], i; scanf_s("%d", &N); for (i = 0; i < N; i++) scanf_s("%d", &A[i]); int Max; Max = MaxSubsequenceSum(A, N);//随便调取一个 printf("%d", Max); return 0;}