有n个房子(1,2,3,…,n)一个小偷必须从1号房子开始,到房子N去偷最大的东西。他可以偷房子然后离开如果他在任何房子里偷东西,房主都会通知左右邻居他能偷多少?
我们如何通过动态规划来解决。。
最佳答案
让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
关于algorithm - 查找可以从N获取的最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40494450/