假设您有一个具有正整数和负整数的数组。如果你站在第i个位置,你可以移动到第i + 1位或第i + 2位。任务是找到路径,如何移动,以获得所有收集值的最大总和。解决此问题的最快算法是什么?感谢。
示例:
0 1 8 -7 -10 -30 -1 -4 -5 0
0 1 8 -10 -1 -4 0 max sum -6
答案 0 :(得分:3)
这是动态编程的典型例子。
对于每个位置,您将计算到达该位置可达到的最大总和。位置 i 可以从位置 i-1 或 i-2 到达,所以:
maxsum[i] = max(maxsum[i-2], maxsum[i-1]) + val[i]
您只需要使用起始值maxsum[<0] = 0
迭代数组。
复杂性:O(n)。
0 1 8 -7 -10 -30 -1 -4 -5 0
0 1 9 2 -1 -28 -2 -6 -7 -6