问题:
给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用o(1)的空间复杂度。要求给出伪码。
解答:
int maxSum(vector<
int>
array)
{
if (array.size() == 0
)
return 0
;
int fi = array[0], hi = 0
;
for (
int i=1; i<array.size(); i++
) {
int nfi = hi +
array[i];
hi =
max(hi, fi);
fi =
nfi;
}
return max(hi, fi);
}
f(i) 标识选择a[i]的情况下,a[0, ...i]的最大sum
h(i)标识不选择a[i]的情况下,a[0,...i]的最大的sum
于是有:
f(i)= h(i-1) + a[i]
h(i) = max(f(i-1), h(i-1))
转载于:https://www.cnblogs.com/jasonkent27/p/5093534.html