对House Robber问题的探究

题目要求:假设强盗要掠夺一排房子,但掠夺相邻的房子会触发警报。每座房子里的财产已知,问在不触发警报情况下可以获得的财产总量。

即:对于一个数列,求一个子列,满足子列中各元素在数列中不相邻,同时使其和最大。


本人采用了递归算法求解:首先考虑掠夺该座房子后接下来发生的事。由于直接跳到四个房子之后可以分解为分别跨越两个,而这样显然收益更大。因此,这里的跳跃情况只有两个:跳到下两个或下三个。

之后分情况讨论:如果下三个还没到终点,那就进行递归比较取最大值并与当前对应的元素相加;若下三个已到终点,但下二个还没到,则直接加上下二个的值;否则,取当前值并结束递归。

对House Robber问题的探究_第1张图片

实际测试结果表明这种算法是正确的,通过了大多数测试。但这种算法有一个问题就是耗时太长,无法通过元素数目较大的测试。这里估计需要将递归过程转化为动态规划过程,本人正在试图解决。

你可能感兴趣的:(对House Robber问题的探究)