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');
}
posted @ 2011-11-12 17:50  Acmen  阅读(215)  评论(0编辑  收藏  举报