有一个长为n的数组A,求所有满足0≤a≤b<n的A[b]-A[a]的和的最大值
水群时候看到的,题面不严谨,选出来的组合里的数字不能再用,下面是样例。
0 8 7 6 5 2 1 10
最大值为8-0 + 10-1 = 17
0 1 2 8 6 7 8 1 9
最大值为8-0 + 8-1 + 7-2 + 9-1 = 28
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> nums;
int n;
cin >> n;
nums.resize(n + 1);
for (int i = 0; i < n; i++)
cin >> nums[i];
int ha = n / 2 + 1;
vector<vector<int>> dp(ha, vector<int>(n));
for (int i = 0; i < ha; i++)
{
if (i != 1)
dp[i][n - 1] = 0;
else
dp[i][n - 1] = nums[n - 1];
}
for (int i = n - 2; i >= 0; i--)
{
for (int j = 0; j < ha; j++)
{
if (j == 0)
dp[j][i] = max(dp[j][i + 1], dp[j + 1][i + 1] - nums[i]);
else if (j == ha - 1)
dp[j][i] = max(dp[j][i + 1], dp[j - 1][i + 1] + nums[i]);
else {
dp[j][i] = max(dp[j - 1][i + 1] + nums[i], dp[j][i + 1]);
dp[j][i] = max(dp[j][i], dp[j + 1][i + 1] - nums[i]);
}
}
}
cout << dp[0][0];
}
问题是上面这段代码里dp[i][j]是什么意思?