查找可从N获取的最大值

时间:2016-11-08 18:56:03

标签: algorithm dynamic-programming

有n个房屋(1,2,3,...,n)。小偷必须从1号房子开始,到达房子n才能偷走最大值。他可以偷走房子,他可以离开。如果他在任何房子里偷了,房主会通知左边和右边的邻居。他最多可以偷多少..

我们如何通过动态编程解决..

1 个答案:

答案 0 :(得分:2)

arr[0..n-1]表示从1n的每个主机的端口数。

在任何时候,您都有两种选择:扫描当前主机的所有端口或不扫描当前主机的端口。

dp[]成为数组。

显然,

dp[i] = max(dp[i-1], arr[i] + dp[i-2])

dp[i-1]表示您不扫描端口的情况。扫描当前主机的端口时arr[i] + dp[i-2]。在这种情况下,由于无法扫描连续主机的限制,您无法添加dp[i-1]。我们添加dp[i-2]

您的最终答案是dp[n-1]

希望它有所帮助!!

修改:以下是与您相同的问题:

在一条线上建有n个房屋,每个房屋都包含一些价值。一个小偷会偷走这些房子里的最大价值,但是他不能偷住两个相邻的房子,因为被盗房子的主人会告诉左边和右边的两个邻居。什么是最大被盗价值?

找到解决方案here