[置顶] 最大连续子序列和

最大连续和问题:

1、采用三重循环,算法复杂度为O(n^3)

tot=0;

best=A[1];

for(int i=1;i<=n;i++)

for(int j=i;j<=n;j++){

int sum=0;

for(int k=i;k<=j;k++)

{

sum+=A[k];

tot++;

}

if(sum>best)

best=sum;

}


2、采用双重循环,算法复杂度为O(n^2)

S[0]=0;

for(int i=1;i<=n;i++)

s[i]=s[i-1]+A[i];

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

best=max(best,s[j]-s[i-1]);


3、分治法,算法复杂度为O(nlogn)

int maxsum(int* A,int x,int y)

{

int v,L,R,maxs;

if(y-x==1)
return A[x];

int m=x+(y-x)/2;

int maxs = max(maxsum(A,x,m),max(A,m,y));

int v,L,R;

v=0;L=A[m-1];

for(int i=m-1;i>=x;i--)

L=max(L,v+=A[i]);

v=0;R=A[m];

for(int i=m;i<y;i++)

R=max(R,v+=A[i]);

return max(maxs,L+R);

}

你可能感兴趣的:(C++,算法,dp,分治,最大连续和)