把所有组合都找出求和,这种方法不再说了,够无聊。直接看高端点的。
动态规划求解
直接看代码
int max(int x, int y)
{
return x>y?x:y;
}
int maxAdd(int a[], int n)
{
int * psum = (int *)malloc(sizeof(int) * n);
int * pmax = (int *)malloc(sizeof(int) * n);
psum[n-1] = pmax[n-1] = a[n-1];
for(int i = n-2; i>=0; i--)
{
psum[i] = max(a[i],a[i] + psum[i+1]);
pmax[i] = max(pmax[i+1],psum[i]);
}
int maxV = pmax[0];
free(psum);
free(pmax);
return maxV;
}
额,,,真不知道怎么解释。
上面用到了两个数组,其实是浪费了很大的空间的。
int max(int x, int y)
{
return x>y?x:y;
}
int maxAdd(int a[], int n)
{
int sumV,maxV;
sumV = maxV = a[n-1];
for(int i = n-2; i>=0; i--)
{
sumV = max(a[i],a[i] + sumV);
maxV = max(sumV,maxV);
}
return maxV;
}
参考书籍:《编程之美》