【发布时间】:2016-11-08 18:56:02
【问题描述】:
有 n 个房子 (1,2,3,...,n)。小偷必须从 1 号房屋开始并到达 n 号房屋才能偷到最多。他可以偷房子,他可以离开。如果他在任何房子里偷了东西,房主会通知左右的邻居。他最多能偷多少..
我们如何通过动态规划来解决..
【问题讨论】:
标签: algorithm dynamic-programming
有 n 个房子 (1,2,3,...,n)。小偷必须从 1 号房屋开始并到达 n 号房屋才能偷到最多。他可以偷房子,他可以离开。如果他在任何房子里偷了东西,房主会通知左右的邻居。他最多能偷多少..
我们如何通过动态规划来解决..
【问题讨论】:
标签: algorithm dynamic-programming
让arr[0..n-1] 表示从1 到n 的每个主机的端口数。
在每一点上,您都有两种选择:扫描当前主机的所有端口或不扫描当前主机的端口。
让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
【讨论】: