198、打家劫舍

动态规划问题
问题划分为n个小问题
若偷第n家,则偷的最大金额为前n-2家的最大金额加上第n家的金额
若不偷第n家,则偷的最大金额为前n-1家的最大金额
dp[i] = max(dp[i-2]+num[i], dp[i-1])
其中dp[0]表示只有一间房屋,则dp[0] = num[0] dp[1]表示只有两间房屋,dp[1]=max(num[0], num[1])

//打家劫舍
#include<iostream>
#include<string>
#include<vector>
using namespace std;
/*
问题划分为n个小问题
若偷第n家,则偷的最大金额为前n-2家的最大金额加上第n家的金额
若不偷第n家,则偷的最大金额为前n-1家的最大金额
即dp[i] = max(dp[i-2]+num[i], dp[i-1])
其中dp[0]表示只有一间房屋,则dp[0] = num[0] dp[1]表示只有两间房屋,dp[1]=max(num[0], num[1])
*/
int rob(vector<int>& nums) {
int n = nums.size();
int dp[100] = {0};
if(n==1)
return nums[0];
else if (n==2)
{
return max(nums[0], nums[1]);
}
dp[0] = nums[0];
dp[1] = max(nums[0], nums[1]);
for(int i = 2; i<n; i++){
dp[i] = max(dp[i-1], dp[i-2] + nums[i]);
}
return dp[n-1];
}
int main()
{
int num[5] = {2,7,9,3,1};
vector<int> nums(num, num+5);
int result = rob(nums);
cout<<result<<endl;
return 0;
}
posted @   不是孩子了  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2023-01-11 43、商品服务---品牌管理---级联更新
2022-01-11 03-docker中的名词概念
2022-01-11 02-docker的历史
2022-01-11 01-docker为什么出现
2022-01-11 02-ES简介
2022-01-11 01-全文检索
点击右上角即可分享
微信分享提示