#include <stdio.h>
int main(int argc, char **argv) {
int k,i,j,sum=0,max=0;
scanf("%d",&k);
int l[k];
for (i=0;i<k;i++)
scanf("%d",&l[i]);
for (i=0;i<k;i++){
sum=0;
for (j=i;j<k;j++){
sum=sum+l[j];
if (sum>max) max=sum;
}
}if (max>0)
printf("%d",max);
else printf("0");
}
第一种方案,最暴力穷举求解。
#include <stdio.h>
int f(int a,int b,int *p);
int max(int a,int b,int c);
int main(void) {
int k,i;
scanf("%d",&k);
int l[k];
for (i=0;i<k;i++){
scanf("%d",&l[i]);
}
printf("%d",f(0,k-1,l));
return 0;
}
int max(int a,int b,int c) {
if (a>=b && a>=c) return a;
if (b>=a && b>=c) return b;
if (c>=a && c>=b) return c;
}
int f(int a,int b,int *p){
int maxr=0,maxl=0,j,sum=0,c,maxx=0,maxy=0;
if (a==b) {
if (p[a]>0) return p[a];
else return 0;
}
c=(a+b)/2;
maxl=f(a,c,p);
maxr=f(c+1,b,p);
sum=0;
maxx=0;
for (j=c+1;j<=b;j++){
sum=sum+p[j];
if (sum>maxx) maxx=sum;
}
sum=0;
maxy=0;
for (j=c;j>=a;j--){
sum=sum+p[j];
if (sum>maxy) maxy=sum;
}
return max(maxl,maxr,maxy+maxx);
}
第二,分治法。
第三种代码太简单就不放上来了,按课件就行。