当前位置: 代码迷 >> 综合 >> 算法 - 动态规划
  详细解决方案

算法 - 动态规划

热度:41   发布时间:2024-01-31 13:00:57.0

题目

给定两个数组,如下:

low = [2, 3, 1, 7], high = [4, 6, 5, 8], 数组长度一样

第i次只能从low[i] 和 hight[i] 里面取一个数。如果从low[i] 取,则第i+1次依然可以从low[i]取;如果第i次从hight[i]取,则第i+1次只能从low[i+1]中取,请给出一个选择方案,使得最终选择方案的和最大。

思路

从第i-1次到第i次,只有2中方案。一是第i-1次选择low的,第i次继续选择low,二是第i-2次选择high的,第i次选择high.

解法

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;int maxValue(vector<int>& low, vector<int>& high) {int a[3] = {0};if (low.size() == 1) return low[0];if (low.size() == 2) return max(low[0] + low[1], high[1]);a[0] = low[0];a[1] = max(low[0] + low[1], high[1]);for (int i = 0; i < low.size(); i++) {a[2] = max(a[0] + high[i], a[1] + low[i]);a[0] = a[1];a[1] = a[2];}return a[2];
}int main() {vector<int> low{2, 3, 5, 1, 7};vector<int> high{4, 6, 8, 23, 12};cout << "Max Value:" << maxValue(low, high) << endl;}

 

  相关解决方案