给定一个整数数组 a ,每个元素表示一个位置上的数值。要求从数组中选择若干个元素,使得任意两个被 选择的元素在原数组中都不相邻,并且所选元素的总和最大。函数 choose(vector& a) 返回能够得到的最 大总和,则横线处应填写( ) int choose(vector& a) { if (a.empty()) return 0; int n = a.size(); if (n == 1) return a[0]; vector dp(n, 0); dp[0] = a[0]; dp[1] = max(a[0], a[1]); for (int i = 2; i < n; ++i) { -------------- // 横线处填入 dp[i] = max(dp[i-1], dp[i-2] + a[i]); } return dp[n - 1]; }
A:dp[i - 1] + a[i]
B:max(dp[i - 1], dp[i - 2] + a[i])
C:max(dp[i - 2], a[i])
D:dp[i - 1] + dp[i - 2]
正确答案:B
试卷来源:202606 CCF-GESP编程能力等级认证C++六级真题