leetcode 198. House Robber
来源:互联网 发布:如何下载软件 编辑:程序博客网 时间:2024/06/13 06:45
you are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
这是个动态规划问题。为了便于理解,咱们先去掉一个条件,不允许两个相邻的数选择。那么我们的状态转移方程就好写了
dp[i] = max(dp[i-1] , dp[i-1]+nums[i-1])) ,其中dp表示第i个房间选择之后,累计总金额。
那么现在我们在改写一下这个式子
dp[i] = max(dp[i-1], max(dp[i-2], dp[i-2]+nums[i-2])+nums[i-1])
现在我们把不允许相邻的两个数选择的条件加上, 那么nums[i-2]不能选,就设为0,上式变为
dp[i] = max(dp[i-1] , max(dp[i-2], dp[i-2]+0) +nums[i-1]);
dp[i]= max(dp[i-1] , dp[i-2]+ nmus[i-1]);
这样我们就推导出转移方程了。
代码就简单了。
/** * Created by kyle on 2016/6/1. */public class HouseRobber { /****** * 动态规划问题,每一步的状态依赖于两个决策,1,上一步是否选取,2,在上一步没选取的状态下,这一步是否选取. 上一步没有选取 那么dp[i] = dp[i-2]+ nums[i-1]; 上一步选取了 ,这一步不能选了, dp[i] = dp[i-1]; 那么dp[i]的最优解为max(dp[i-2]+ nums[i-1], dp[i-1]); * @param nums * @return */ static public int houseRobber(int[] nums){ if(nums == null || nums.length <1){ return 0; } int[] dp = new int[nums.length+1]; dp[0] = 0; dp[1] = nums[0]; for(int i = 2; i< nums.length+1; i++){ dp[i]= Math.max(dp[i-1], dp[i-2]+ nums[i-1]); } return dp[nums.length]; } static public void main(String[] a){ int[] nums={2,4, 5 ,8,1,9,8,3,0,7,6}; int profit = houseRobber(new int[0]); System.out.println("profit is :" + profit); }}
- [LeetCode]198.House Robber
- 【LeetCode】198. House Robber
- 【LeetCode】198.House Robber
- LeetCode 198. House Robber
- [leetcode] 198.House Robber
- [leetcode] 198. House Robber
- LeetCode:198. House Robber
- 198. House Robber LeetCode
- [LeetCode]198. House Robber
- LeetCode || 198. House Robber
- LeetCode-198. House Robber
- [LeetCode]198. House Robber
- 【LeetCode】198. House Robber
- LeetCode#198. House Robber
- LeetCode 198. House Robber
- leetcode 198. House Robber
- LeetCode *** 198. House Robber
- leetcode 198. House Robber
- Jacob操作office文档(Word,PPT,Excel)
- 表值函数
- Win8下 OPENCV3.1 配置CUDA7.5+opencv_contrib
- 汇编Jmp指令总结
- Mysql各种类型字段长度
- leetcode 198. House Robber
- QNX Bootloader 启动顺序
- 银联支付-SDK使用、测试流程
- Start application automatically during controller boot-up
- lua中字符串匹配笔记
- XTU 1233 Coins(DP)
- Master-Detail Application的纯代码实现
- Java:重写equals()和hashCode()
- Android状态栏黑色字体