考虑线性动态规划,设f[i]表示前i个房屋所能偷窃的最高金额,对于第i个房屋,可以选择抢劫它并加上前i-2个房屋所能抢劫的金额之和,也可以选择不抢劫第i个房屋,选择前i-1个房屋抢劫的金额之和,二者取max,最后返回全部房屋偷窃的最高金额即可。由于第一个和最后一个屋子连着,我们可以dp从第一个到倒数第二个屋子的结果和第二个到最后一个屋子的结果取max
def rob(a):
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一团,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整教数组,计算你在不触动警报装置的情况下,今晚能偷窃到的最高金额。
输入
3
2 3 2
输出
3
说明:
你不能先偷窃1号房屋(金额=2),,然后偷窃3号房屋(金额=2),因为他们是相邻的。
输入
4
1 2 3 1
输出
4
说明:
你可以先偷窃1号房屋(金额=1),然后偷窃3号房屋(金额=3)
偷窃到的最高金额 =1+3=4。
本题属于以下题库,请选择所需题库进行购买