动态规划问题的解决步骤
来源:互联网 发布:斯沃数控仿真软件 编辑:程序博客网 时间:2024/06/06 08:22
leetcode198 House Robber
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.
class Solution { /* 1.暴力搜索 O(2^n) int solve(int idx, vector<int>& nums) { if(idx < 0) return 0; if(idx == 0) return nums[0]; else if(idx == 1) return max(nums[0], nums[1]); return max( solve(idx-2, nums) + nums[idx], solve(idx - 1, nums)); } int rob(vector<int>& nums) { int n = nums.size(); return solve(n-1, nums); } */ /* 2. 以空间换时间, O(n)private: vector<int> result;private: int solve(int idx, vector<int>& nums) { if(idx < 0) return 0; if(result[idx] >= 0) return result[idx]; result[idx] = max(solve(idx - 2, nums) + nums[idx], solve(idx - 1, nums)); return result[idx]; }public: int rob(vector<int>& nums) { int n = nums.size(); if(n==0) return 0; result.resize(n); for(int i=0; i < n; ++i) { result[i] = -1; } return solve(n-1, nums); } *//*3. 递归转迭代,变身动态规划private: vector<int> result;public: int rob(vector<int>& nums) { int n = nums.size(); if(n==0) return 0; result.resize(n); if(n >= 1) result[0] = nums[0]; if(n >= 2) result[1] = max(nums[0], nums[1]); for(int i = 2; i < n; ++i) { result[i] = max(result[i - 2] + nums[i], result[i - 1]); } return result[n-1]; }*/ // 滚动数组 空间最小化 O(n) ==>> O(3)public: int rob(vector<int>& nums) { int n = nums.size(); if(n==0) return 0; vector<int> result(3); if(n >= 1) result[0] = nums[0]; if(n >= 2) result[1] = max(nums[0], nums[1]); for(int i = 2; i < n; ++i) { result[i % 3] = max(result[ (i - 2) % 3] + nums[i], result[ (i - 1) % 3]); } return result[ (n-1) % 3]; }};
阅读全文
1 1
- 动态规划问题的解决步骤
- 旅行商问题的动态规划解决
- 动态规划解决整数划分的问题
- 动态规划的求解步骤
- 动态规划解决装载问题
- 动态规划解决背包问题
- 动态规划解决skiing问题
- 动态规划解决经典问题
- 动态规划解决背包问题
- TSP问题动态规划解决
- 动态规划解决背包问题
- 动态规划解决硬币问题
- 动态规划解决迷宫问题
- 动态规划解决迷宫问题
- 使用动态规划解决有关数字组合的问题
- 利用动态规划解决-字符串的匹配问题
- 用动态规划的思想来解决组合数问题
- 动态规划----贪心的动态规划问题
- JS三元运算符
- 读《程序员生存定律》心得体会
- java云课堂 单词长度
- Hessian源码剖析(七)
- poj2195
- 动态规划问题的解决步骤
- Android相机的闪关灯
- 【HDU 1010】Tempter of the Bone(DFS,奇偶剪枝)
- 使用java实现俄罗斯方块小游戏
- 【Go】区别并行和并发
- Hadoop组件之Partitioner
- 两步实现Youtube网站视频下载
- 翻译 | 玩转 React 表单 —— 受控组件详解
- Linux系统运维工程该具备哪些素质