为什么要贴这个算法,过一段时间,一些人肯定会有用的到的.这里先卖个关子.嘿嘿.
这个算法就是求N个排列数中(有正有负),相邻N个相加和为最大的值的范围.个人认为这个是较快的算法了.
#include <stdio.h>
#define N 10
int A[N] = {-1, -2, -3, -4, 5, 5, -4, -3, -2, -1},
int retsum(int *A){
int S[N] = {0}, M[N] = {0}, I[N] = {0}, R = 0, U = 1, i = 2;
R = S[U] = A[U];
for(; i < N; i ++){
S[i] = S[i-1] + A[i];
if(S[i - 1] <= M[i - 1]){
M[i] = S[i - 1];
I[i] = i - 1;
}else{
M[i] = M[i - 1];
I[i] = I[i - 1];
}
if(R < S[i] - M[i]){
R = S[i] - M[i];
U = i;
}
}
//printf("SUM = %d ( A[%d] <=> A[%d] )/r/n", R, I[U]+1, U);
return R;
}