题目名称:最大子段和
题目描述:给出一段序列,选出其中连续且非空的一段使得这段和最大。
输入格式:
第一行是一个正整数N,表示了序列的长度。
第2行包含N个绝对值不大于10000的整数A[i],描述了这段序列。
输出格式:
仅包括1个整数,为最大的子段和是多少。子段的最小长度为1。
枚举
最蠢的办法,枚举左端点和右端点,再求和,用一个max储存历史的最大值,就可以了。时间复杂度O(n3)。
1 #include <stdio.h> 2 #include <math.h> 3 #include <string.h> 4 int _Max(int x,int y){return x>y?x:y;} 5 int num[10001],sum=0; 6 int max=0; 7 int main(){ 8 int n; 9 scanf("%d",&n); 10 int i,j; 11 for(i=1;i<=n;i++){ 12 scanf("%d",&num[i]); 13 } 14 for(i=1;i<n;i++){ 15 for(j=i+1;j<=n;j++){ 16 sum=0; 17 for(int k=i;k<=j;k++) 18 sum+=num[k]; 19 max=_Max(sum,max); 20 } 21 } 22 printf("%d\n",max); 23 return 0; 24 }