下面代码求从包含非负元素的数组中选择若干个互不相邻元素所能得到的最大和。横线处应填写( )。
int maxSum(vector<int> &a) {
int n = a.size();
if (n == 0)
return 0;
if (n == 1)
return a[0];
vector<int> dp(n);
dp[0] = a[0];
dp[1] = max(a[0], a[1]);
for (int i = 2; i < n; ++i)
dp[i] = __________________________;
return dp[n - 1];
}
- A.
dp[i - 1] + a[i] - B.
dp[i - 2] + a[i] - C.
max(dp[i - 1], dp[i - 2] + a[i]) - D.
max(dp[i - 1], a[i])