0001 int gs_DC(int A[], int lo, int hi) { //分治策略:O(n*logn) 0002 if (hi-lo < 2) return A[lo]; 0003 int mi = (lo+hi)/2; int gsL = 0, gsR = 0; //前缀|后缀中的最大后缀|前缀 0004 for (int s = 0, i = mi-1; lo <= i; i--) //枚举[lo,mi)的所有后缀 0005 gsL = max(gsL, s += A[i]); //择优更新 0006 for (int s = 0, j = mi; j < hi; j++) //枚举[mi,hi)的所有前缀 0007 gsR = max(gsR, s += A[j]); //择优更新 0008 return max(gsL + gsR, max(gs_DC(A, lo, mi), gs_DC(A, mi, hi))); //递归 0009 } //gs_DC