#include <iostream>
using namespace std;
const int maxn = 1005;
int dp[maxn][maxn];
bool vis[maxn][maxn];
int a[maxn], n;
int DP(int l, int r, int p) {
if (vis[l][r]) {
return dp[l][r];
}
if (l > r) {
return 0;
}
vis[l][r] = 1;
int res = 0;
if (p == 0) {
res = max(DP(l, r - 1, 1) + a[r], DP(l + 1, r, 1) + a[l]);
}
else {
if (a[l] < a[r]) res = DP(l, r - 1, 0) - a[r];
else res = DP(l + 1, r, 0) - a[l];
}
return dp[l][r] = res;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
cout << DP(1, n, 0) << endl;
return 0;
}
转载请注明原文地址:https://blackberry.8miu.com/read-16918.html