| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:原来这个题这么简单……In Reply To:原来这个题这么简单…… Posted by:c0500448264 at 2005-07-13 22:52:48 #include<iostream>
using namespace std;
int biggest(int &start,int &end,int a[])
{
int j,b,endb,startb,max,c=start,d=end;
endb=end;
startb=start;
for(j=c+1;j<=d;j++)
{
if(b+a[j]>0)
{
b+=a[j];
endb=j;
}
else
{
startb=endb=j+1;
b=0;
}
if(b>max)
{
start=startb;
end=endb;
max=b;
}
}
cout<<a[start]<<' '<<a[end]<<endl;
return max;
}
int main()
{
int T,n,a[50001],i,j,top,max,b,start,end,num,newstart,newend,num0,num1,num2,nn;
cin>>T;
for(i=0;i<T;i++)
{
cin>>n;
for(j=1;j<=n;j++)
cin>>a[j];
max=a[1];
b=max;
top=0;
start=1;
end=n;
num=biggest(start,end,a);
newend=start-1;
newstart=end;
j=0;
nn=n;
num0=biggest(j,newend,a);
num1=biggest(newstart,nn,a);
num2=num0>num1?num0:num1;
max=0,b=0;
for(j=2;j<=n;j++)
{
if(b+a[j]<0)
{
b+=a[j];
}
else
{
b=0;
}
if(b<max)
{
max=b;
}
}
if(num+num2<num-max)
num=num-max;
else num+=num2;
cout<<num<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator