动态规划:
dp[i] = max(dp[i - 2] + arr[i - 1], dp[i - 1])
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//函数功能:实现数组中不相邻元素的和最大,此数组元素非负
//函数返回值为最大不相邻元素和
//第一个参数为数组, 第二个参数为数组长度
int rob(vector<int> arr, int length)
{
if (length = 0)
return 0;
if (length == 1)
return arr[0];
int *dp = new int[length + 1];
dp[0] = 0;
dp[1] = arr[0];
for (int i = 2; i <= length; ++i)
{
dp[i] = max(dp[i - 1], dp[i - 2] + arr[i - 1]);
}
return dp[length];
}
int main()
{
vector<int> arr = {3, 2, 5, 10, 7};
cout << rob(arr, 5);
}