198. House Robber,213. House Robber II
2015-12-20 11:21
232 查看
198. House Robber
Total Accepted: 45873 Total Submissions: 142855 Difficulty: EasyYou 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.
(M) Maximum Product Subarray (M) House Robber II (M) Paint House (E) Paint Fence
class Solution { public: int rob(vector<int>& nums) { int nums_size = nums.size(); int max_money = 0; vector<int>dp(nums_size,0); for(int i=0;i<nums_size;++i){ int m = 0; for(int j=i-2;j>=0;j--){ m = max(m,dp[j]); } dp[i] = m+nums[i]; max_money = max(max_money,dp[i]); } return max_money; } }; /** dp[i] = max(dp[i-2],dp[i-3]...dp[1])+nums[i]; [9,8,9,20,8] [1,2,3,55,54,2] */
Next challenges: (M) House Robber II (M) Paint House (E) Paint Fence
213. House Robber II
Total Accepted: 18274 Total Submissions: 63612 Difficulty: MediumNote: This is an extension of House Robber.
After robbing those houses on that street, the thief has found himself a new place for his thievery so that he will not get too much attention. This time, all houses at this place are arranged in a circle. That means the first house is the neighbor of the last one. Meanwhile, the security system for these houses remain the same as for those in the previous street.
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-2],dp[i-3]...dp[1])+nums[i]; [9,8,9,20,8] [1,2,3,55,54,2] */ class Solution { public: int rob(vector<int>& nums,int start,int end) { if(end<=start) return 0; int nums_size = end-start; int max_money = 0; vector<int>dp(nums_size,0); int k = 0; cout<<"start="<<start<<" end="<<endl; for(int i=start;i<end;++i){ int m = 0; for(int j=k-2;j>=0;j--){ m = max(m,dp[j]); } dp[k] = m+nums[i]; cout<<"dp["<<(k)<<"]="<<dp[k]<<endl; max_money = max(max_money,dp[k]); k++; } return max_money; } int rob(vector<int>& nums) { int nums_size = nums.size(); return nums_size==1 ? nums[0] : max(rob(nums,0,nums_size-1),rob(nums,1,nums_size)); } };
相关文章推荐
- MATLAB 图像处理命令
- 对账sql
- 《失落的世纪致富经典》卷二:3有关致富的第一真理
- online_judge_1117
- 项目总结+团队贡献分
- 收集了1000个iOS 常用的库
- 从大数据菜鸟走上大师的历程
- 荷马史诗
- 【杭电】[1097]A hard puzzle
- Java泛型中E、T、K、V等的含义
- ZooKeeper集群安装
- ubuntu14.04安装eclipse
- 北京Uber优步司机奖励政策(12月20日)
- python 爬虫时遇到问题及解决
- Java.io.File.list() Method
- 欢迎使用CSDN-markdown编辑器
- C++ 数据结构 *** 广义表的部分实现
- 100. Same Tree
- eclipse SVN 插件本地安装
- 调用泛型方法