分治
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int maxsum(int* A, int x, int y)//可以求[x,y)上的最大连续和 { if (y - x == 1)return A[x]; int m = x + (y - x) / 2; int maxs = max(maxsum(A, x, m), maxsum(A, m, y)); int L = A[m - 1],v = 0; for (int i = m - 1; i >= x; i--) L = max(L, v += A[i]);//合并左边的最大连续和 int R = A[m]; v = 0; for (int i = m; i < y; i++) R = max(R, v += A[i]);//合并右边的最大连续和 return max(L + R, maxs); } int main(void) { //求最大连续和 int A[] = { 3,4,10,-1,10,5 }; int a = maxsum(A, 0, 5); cout << a << endl; return 0; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号