首页 > 其他 > 详细

一道简单DP题

时间:2016-01-01 18:48:16      阅读:159      评论:0      收藏:0      [点我收藏+]

问题:

给定一个整数的数组,相邻的数不能同时选,求从该数组选取若干整数,使得他们的和最大,要求只能使用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))

一道简单DP题

原文:http://www.cnblogs.com/jasonkent27/p/5093534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!