简单的动态规划问题,注意初始变量的初始化。
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。
示例 1:
输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/house-robber
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
附录源码:
1 #include <vector> 2 #include<iostream> 3 using namespace std; 4 class Solution { 5 public: 6 int Max(int p1, int p2){ return p1>p2? p1 : p2;} 7 int rob(vector<int>& nums) { 8 int p1 = 0; 9 int p2 = 0; 10 int result = 0; 11 if(nums.empty()) return 0; 12 if(nums.size() == 1) return nums[0]; 13 if(nums.size() == 2) 14 { 15 p1 = nums[0]; 16 p2 = nums[1]; 17 result = Max(p1,p2); 18 } 19 p1 = nums[0]; 20 p2 = nums[1]; 21 result = Max(p1,p2); 22 for(int i = 2; i <nums.size(); i++) 23 { 24 result = Max(p1+nums[i], p2); 25 printf("%d result%d \n",i ,result); 26 p1 = p2; 27 p2 =result; 28 } 29 return result; 30 } 31 }; 32 33 int main() 34 { 35 vector<int>v1 ={2,1,1,2}; 36 Solution s; 37 int result =s.rob(v1); 38 return 0; 39 }
原文:https://www.cnblogs.com/zzas0/p/12830634.html