整型数组,求连续子序列和的最大值。 如 -1 , 3, -4,7 结果是7 ***** -1 ,4,-2,7 结果是 8。
分析: 利用动态规划,设f(i) 是以第 i 位结尾的所有序列中和最大的序列的值。
有: f(i) = a[i] 当a[i] <= 0
f(i) = a[i] + f(i-1) 当a[i] > 0
1 int maxValue(int *a,int len) { 2 int *f = (int*)malloc(sizeof(int)*len); 3 if(f == NULL) exit(-1); 4 f[0] = a[0];//动规 5 for(int i = 1;i < len; ++i) { 6 if(f[i-1]<=0) 7 f[i] = a[i]; 8 else 9 f[i] = f[i-1] + a[i]; 10 } 11 int max = 0;//扫描结果数组,找出最大的 12 for(int j = 0;j < len; ++j) { 13 14 if(f[max] < f[j]) 15 max = j; 16 } 17 return f[max]; 18 }