你是一个专业的小偷计划偷窃沿街的房屋。每间房内都藏有一定的现金影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组计算你 不触动警报装置的情况下 一夜之内能够偷窃到的最高金额。示例 1输入[1,2,3,1]输出4解释偷窃 1 号房屋 (金额 1) 然后偷窃 3 号房屋 (金额 3)。偷窃到的最高金额 1 3 4 。示例 2输入[2,7,9,3,1]输出12解释偷窃 1 号房屋 (金额 2), 偷窃 3 号房屋 (金额 9)接着偷窃 5 号房屋 (金额 1)。偷窃到的最高金额 2 9 1 12 。提示1 nums.length 1000 nums[i] 400我的答案classRob{public:introb(vectorintnums){//找出所有路径取最大一条intmaxGet0;for(inti0;inums.size();i){vectorinttemp(nums.begin(),nums.end());intsumtemp[i];//任一点出发if(temp.size()1){if(temp.size()1)temp.erase(temp.begin());elseif(i1temp.size()){if(i1temp.size())temp.erase(temp.begin(),temp.begin()i);elsetemp.erase(temp.begin(),temp.end());}elsetemp.erase(temp.begin(),temp.begin()i2);}if(temp.size()1)sumrob(temp);elseif(temp.size()1)sumrob(temp);if(summaxGet)maxGetsum;}returnmaxGet;}};intmain(){vectorvectorintnums;nums.push_back({2,1,1,2});//4nums.push_back({1,2,3,1});//4nums.push_back({2,7,9,3,1});//12nums.push_back({2,3,2});//4nums.push_back({1,2,3,1});//4nums.push_back({1,2});//2nums.push_back({1,2,2,1});//3nums.push_back({2,4,8,9,9,3});//19nums.push_back({1,9,9});//10nums.push_back({8,2,8,9,2});//18nums.push_back({1,2,1,1});//3nums.push_back({6,3,10,8,2,10,3,5,10,5,3});//39Rob rob;for(vectorvectorint::iterator iternums.begin();iter!nums.end();iter){std::cout收集最多金额为:rob.rob(*iter)std::endlstd::endl;}}
力扣原题《打家劫舍》递归版动态规划,纯手搓,已验证,未优化
发布时间:2026/5/31 14:36:13
你是一个专业的小偷计划偷窃沿街的房屋。每间房内都藏有一定的现金影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组计算你 不触动警报装置的情况下 一夜之内能够偷窃到的最高金额。示例 1输入[1,2,3,1]输出4解释偷窃 1 号房屋 (金额 1) 然后偷窃 3 号房屋 (金额 3)。偷窃到的最高金额 1 3 4 。示例 2输入[2,7,9,3,1]输出12解释偷窃 1 号房屋 (金额 2), 偷窃 3 号房屋 (金额 9)接着偷窃 5 号房屋 (金额 1)。偷窃到的最高金额 2 9 1 12 。提示1 nums.length 1000 nums[i] 400我的答案classRob{public:introb(vectorintnums){//找出所有路径取最大一条intmaxGet0;for(inti0;inums.size();i){vectorinttemp(nums.begin(),nums.end());intsumtemp[i];//任一点出发if(temp.size()1){if(temp.size()1)temp.erase(temp.begin());elseif(i1temp.size()){if(i1temp.size())temp.erase(temp.begin(),temp.begin()i);elsetemp.erase(temp.begin(),temp.end());}elsetemp.erase(temp.begin(),temp.begin()i2);}if(temp.size()1)sumrob(temp);elseif(temp.size()1)sumrob(temp);if(summaxGet)maxGetsum;}returnmaxGet;}};intmain(){vectorvectorintnums;nums.push_back({2,1,1,2});//4nums.push_back({1,2,3,1});//4nums.push_back({2,7,9,3,1});//12nums.push_back({2,3,2});//4nums.push_back({1,2,3,1});//4nums.push_back({1,2});//2nums.push_back({1,2,2,1});//3nums.push_back({2,4,8,9,9,3});//19nums.push_back({1,9,9});//10nums.push_back({8,2,8,9,2});//18nums.push_back({1,2,1,1});//3nums.push_back({6,3,10,8,2,10,3,5,10,5,3});//39Rob rob;for(vectorvectorint::iterator iternums.begin();iter!nums.end();iter){std::cout收集最多金额为:rob.rob(*iter)std::endlstd::endl;}}