poj 2593 Max Sequence
#include <iostream> //参照 POJ 2479
using namespace std;
#define MAX 100001
int list[MAX],left_sum[MAX],right_sum[MAX]; //要声明为全局变量,如果在主函数内声明,会产生堆栈溢出
int main()
{
int n,i;
while(scanf("%d",&n)&&n)
{
for(i=1;i<=n;i++)
scanf("%d",&list[i]);
left_sum[1]=list[1];
for(i=2;i<=n;i++)
if(left_sum[i-1]<0)
left_sum[i]=list[i];
else
left_sum[i]=left_sum[i-1]+list[i];
right_sum[n]=list[n];
int max_right_sum=right_sum[n],res=-3000;
for(i=n;i>1;i--)
{
if(right_sum[i]<0)
right_sum[i-1]=list[i-1];
else
right_sum[i-1]=list[i-1]+right_sum[i];
if(right_sum[i]>max_right_sum)
max_right_sum=right_sum[i];
if(left_sum[i-1]+max_right_sum>res)
res=left_sum[i-1]+max_right_sum;
}
printf("%d\n",res);
}
return 0;
}