非负数组不相邻元素和最大

动态规划:

  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);
}

猜你喜欢

转载自blog.csdn.net/qq_29869043/article/details/82831719