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;
}

  

posted on 2011-07-18 11:42  sysu_mjc  阅读(114)  评论(0编辑  收藏  举报

导航