| ||||||||||
| 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 | |||||||||
Why wrong???#include<stdio.h>
int main()
{int test,n,i,j,k,sum,max,max1,max2,a[50001],j0;
scanf("%d",&test);
//getchar();
while(test--)
{scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",&a[i]);
sum=max1=max2=0;j=0;
for(i=1;i<=n;i++)
{if(sum>max1){max1=sum;j=i-1;}
sum+=a[i];
if(sum<0)sum=0;
}sum=max2=0;
//printf("max1=%d\n",max1);
for(i=j;i>0;i--)
{if(a[i]<0){k=i;break;}
max2+=a[i];
max1-=a[i];
}max1=sum=0;
for(i=1;i<=k;i++)
{if(sum>max1)max1=sum;
sum+=a[i];
if(sum<0)sum=0;
}sum=0;
for(i=j+1;i<=n;i++)
{if(sum>max1)max1=sum;
sum+=a[i];
if(sum<0)sum=0;
}
if(max1==0)
{max1=a[1];j=1;
for(i=2;i<=n;i++)
if(a[i]>max1&&a[i]!=max2){max1=a[i];j=i;}
}//printf("j=%d\n\n",j);
if(max2==0)
{if(j!=1)
{max2=a[1];
for(i=2;i<=n;i++)
if(a[i]>max2&&i!=j)max2=a[i];
}
if(j==1)
{max2=a[2];//j0=2;
for(i=3;i<=n;i++)
if(a[i]>max2)max2=a[i];
}
}
max=max1+max2;
//printf("max1=%d max2=%d max=%d\n",max1,max2,max);
printf("%d\n",max);
}
}
/*
10
10
-1 -1 -2 -2 -3 -3 -4 -4 -5 -5
10
1 -1 2 2 3 -3 4 -4 5 -5
10
1 -1 -2 -2 -3 -3 4 -4 5 -5
10
-1 -1 -2 -2 -3 -3 -4 -4 5 -5
Sample Output
13
*/
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator