打家劫舍

题目链接:

涉及知识:动态规划

分析:

题目中的例子:2 7 9 3 1

2 7 9 3 1
2 7 11 10 12
不拿 0 2 7 11 10

设 dp[k] 表示 k 个元素所能打劫的最大值。

则状态转移方程 dp[k] = max(dp[k-2] + cur,dp[k-1])

dp[k-2] + cur:表示不拿第 k-1 个元素,当前元素 + (前(k-2)个元素所能达到的最大值)。

dp[k-1] :表示 k-1 个元素所能打劫的最大值。

代码:

class Solution {
    public int rob(int[] nums) {
        if(nums.length == 0){
            return 0;
        }

        int take = 0, noTake = 0;
        int tmp = 0;

        for(int i = 0; i < nums.length; ++i){
            tmp = noTake + nums[i];
            noTake = Math.max(take, noTake);
            take = tmp;
        }

        return Math.max(take, noTake);
    }
}
posted @ 2019-08-22 00:25  telankesi  阅读(148)  评论(0编辑  收藏  举报