题目
给定两个数组,如下:
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;}