198. 打家劫舍-E

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装  
有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
 偷窃到的最高金额 = 1 + 3 = 4 。
示例 2:

输入: [2,7,9,3,1]
输出: 12
解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
 偷窃到的最高金额 = 2 + 9 + 1 = 12 。
  • 分析:

    动态规划做的多了,逐渐感觉,对于最值问题,都可以,先往动态规划的方向想一想;
    现在看来,dp做的就是以下几件事:
    	1. 找最值判断,max/min (若不是那就别往动态规划想了)
    	2. 判断最优子结构,即划分集合,{...,a}和{...,a,b}进行比较,加入b前的集合有一个最值,
    		加入b后,利用{...,a}集合的最值,判断加入b后的集合最值情况,要利用{...,a}集合的最值
    	3. 构造并利用dp表记录各集合下的最值
    本题目:
     1. 因为不能相连,所以对于i位置的最大累计和,应当是nums[i]+max{nums[i],0<=i<=i-2},
     2. 对于集合{...,nums[i]},除nums[i-1]外,最大累计和是nums[i]
     3. 所以集合集合{...,nums[i]}的最大累计和应当是:max{nums[i-1],nums[i-2]}	
    递推公式:
    

d p [ i ] = { n u m s [ i ] i = 0 m a x { n u m s [ i − 1 ] , n u m s [ i ] } i = 1 m a x { d p [ i − 1 ] , d p [ i − 2 ] + n u m s [ i ] } i &gt; 0 dp[i]=\left\{ \begin{aligned} &amp;nums[i] &amp; i=0 \\ &amp;max\{nums[i-1],nums[i]\}&amp;i=1\\ &amp;max\{dp[i-1],dp[i-2]+nums[i]\} &amp; i&gt;0\\ \end{aligned} \right. dp[i]=nums[i]max{nums[i1],nums[i]}max{dp[i1],dp[i2]+nums[i]}i=0i=1i>0

  • code
package main
import "fmt"
func rob(nums []int) int {
	s:=len(nums)
	if s==0{
		return 0
	}else if s==1{
		return nums[0]
	}
	for i:=2;i<s;i++{
		if nums[i-2]>nums[i-1]{
			nums[i-1]=nums[i-2]
		}
		nums[i]+=nums[i-2]
	}
	if nums[s-2]>nums[s-1]{
		nums[s-1]=nums[s-2]
	}
	return nums[s-1]
}
func main(){
	fmt.Println(rob([]int{2,7,9,3,1}))
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值