题意理解
给定一组数,每次取一个数,连续两次取的数不能相邻,问可以取的数总和最大是多少
问题分析
用动规
状态量是满足要求的前n个数的总和的最大值
状态转移方程是,前n个数的最大和等于前n-1个最大和,与前n-2个最大和+第n-1个数的和,两者之间的最大值。初值有两个,dp[0]= 0,dp[1]=a[0]。
其他
链接
int rob(vector& nums) {
int len = nums.size();
if (len == 0) // 输入为空
return 0; // 输出为0
int dp[len + 1] = {}; //dp数组
dp[0] = 0; //设置初值0
dp[1] = nums[0]; //只有一个房子,就打劫一家
for(int i = 2; i <= len; i ++)
{
dp[i] = max(dp[i - 2] + nums[i - 1], dp[i - 1]); //前i个房子的钱等于前i-2个房子的钱+第i-1个房子的钱,与钱i-1个房子的钱之间的最大值
}
return dp[len]; //最后一个是前n个房子的钱
}