#include <bits/stdc++.h>
using namespace std;
const long long MAX_N = 4e3 + 10;
const long long mod = 1e9 + 7;
const int INF = 1e9;
inline long long bpow(long long t, long long n) {
  long long ans = 1;
  while (n > 0) {
    if (n & 1) ans = (ans * t) % mod;
    t = (t * t) % mod, n >>= 1;
  }
  return ans;
}
unordered_map<long long, long long> dp;
long long a[MAX_N];
long long ind(long long l, long long r, long long k, long long x) {
  return l * 8000 * 65 + r * 130 + k * 2 + x;
}
long long cdp(long long l, long long r, long long k, long long x) {
  if ((r - l + 1) < k) return 0;
  long long pos = ind(l, r, k, x);
  if (dp.count(pos)) return dp[pos];
  long long& ans = dp[pos];
  if (x == 0)
    ans = max(cdp(l + k, r, k, 1) + a[l + k - 1] - a[l - 1],
              (r - l >= k) ? (a[l + k] - a[l - 1] + cdp(l + k + 1, r, k + 1, 1))
                           : (-INF));
  else
    ans = min(a[r - k] - a[r] + cdp(l, r - k, k, 0),
              (r - l >= k) ? (a[r - k - 1] - a[r] + cdp(l, r - k - 1, k + 1, 0))
                           : INF);
  return ans;
}
int main() {
  dp.rehash(4000 * 4000);
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cout << fixed << setprecision(0);
  long long n;
  cin >> n;
  for (long long i = 1; i <= n; i++) cin >> a[i];
  for (long long i = 1; i <= n; i++) a[i] += a[i - 1];
  cout << cdp(1, n, 1, 0);
}
