题目链接: 力扣
思路:
动态规划:
线性dp:
定义dp数组:dp[i]偷到下标为i获得最高金额
状态转移方程: 偷第i家 , dp[i]=dp[i-2]+nums[i]
不偷第i家,dp[i]=dp[i-1]
所以,dp[i]=max( dp[i-2]+nums[i] ,dp[i-1] ) (注意i要大于等于2)
出口: dp[0]=nums[0] ,dp[1]=max{nums[0],nums[1]}(如果nums个大于1)
代码:
状态机模型:
dp[i][0]表示抢前i家且第i家不抢的最大值
dp[i][1]表示抢前i家且第i家抢的最大值
状态转移:
dp[i][0]=max(dp[i-1][1],dp[i-1][0]);
dp[i][1]=dp[i-1][0]+w[i]
初始化:
dp[0][0]=0
dp[0][1]=-INF