PKU2593给出一串数字使得其中两个子段和最大

#include<stdio.h>



/*

	PKU2593给出一串数字使得其中两个子段和最大

*/



void MaxSum(int n,int m,int *a,int *b);



int main(){

	

	int a1[100002],a2[100002],n,b1[100002],b2[100002];

	a1[0]=a2[0]=b1[0]=b2[0]=0;

	while(scanf("%d",&n),n){

		int i;

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

			scanf("%d",&a1[i]);		

			a2[n+1-i]=a1[i];

		}



		int max=-0x0ffffff;

		MaxSum(1,n,a1,b1);

		MaxSum(1,n,a2,b2);



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

			if(max<b1[ii]+b2[n-ii])

				max = b1[ii]+b2[n-ii];



		printf("%d\n",max);

	}

	return 0;



}



void MaxSum(int n,int m,int *a,int *b){

	int sum = -0x0ffffff,bb=-0x0ffffff;

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

		if(bb>0)bb+=a[i];

		else

			bb=a[i];

		if(bb>sum)sum=bb;

		b[i]=sum;

		//printf("%d ",b[i]);

	}

	//putchar('\n');

}

你可能感兴趣的:(pku)