| ||||||||||
| 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 | |||||||||
为什么会超时呢?求助大牛#include<stdio.h>
#include<stdlib.h>
int a[100005], max1[100005], max2[100005];
int n;
/*int fmax1 (int i){
int k, max=0;
int s = 0;
for (k=0;k<=i;k++){
s += a[k];
if (s<0)
s=0;
if (s>max)
max=s;
}
return max;
}
int fmax2 (int i){
int k, max=0;
int s = 0;
for (k=n-1;k>=i;k--){
s += a[k];
if (s<0)
s=0;
if (s>max)
max=s;
}
return max;
}*/
int findmax(int a[], int size){
int i, j, max=-1005;
for (i=0;i<=size-1;i++){
if (a[i]>max){
j = i;
max = a[i];
}
}
a[j] = -1005;
return max;
}
//#define local
int main(){
int flag,sum,max;
int i;
int k, s;
#ifdef local
freopen("input1.txt","r",stdin); //-5 9 -5 11 20
#endif
scanf("%d",&n);
while(n!=0){
flag = 0;
for (i=0;i<=n-1;i++){
scanf("%d",&a[i]);
if (a[i]>=0)
flag++;
}
if (flag<=2){
max = findmax(a,n)+findmax(a,n);
}
else{
for (i=0;i<=n-2;i++){
max1[i]=0;s = 0;
for (k=0;k<=i;k++){
s += a[k];
if (s<0)
s=0;
if (s>max1[i])
max1[i]=s;
}
}
for (i=n-1;i>=1;i--){
max2[i]=0;s = 0;
for (k=n-1;k>=i;k--){
s += a[k];
if (s<0)
s=0;
if (s>max2[i])
max2[i]=s;
}
}
max = 0;
for (i=0;i<=n-2;i++){
sum = max1[i]+max2[i+1];
if (sum>max)
max = sum;
}
}
printf("%d\n",max);
scanf("%d",&n);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator