有n个房屋(1,2,3,...,n)。小偷必须从1号房子开始,到达房子n才能偷走最大值。他可以偷走房子,他可以离开。如果他在任何房子里偷了,房主会通知左边和右边的邻居。他最多可以偷多少..
我们如何通过动态编程解决..
答案 0 :(得分:2)
让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