#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
const int mod = 1000000007;
const int inf = 1000000009;
const long long INF = 1000000000000000009;
const long long big = 1000000000000000;
const long double eps = 0.000000000000000000001;
using namespace std;
unordered_map<int, int> M;
int S[5005], T[5005];
int funkcja(int a, int b, int k, int r) {
  if (b < a) return 0;
  if ((b - a + 1) / k == 0) return 0;
  if ((b - a + 1) == k) return S[b] - S[a - 1];
  int key = 2u * a * 4005 * 80 + b * 80 * 2 + k * 2 + r;
  if (M.count(key)) return M[key];
  int wynik = -inf;
  if (r == 0) {
    if (a + k - 1 <= b)
      wynik = max(wynik, S[a + k - 1] - S[a - 1] - funkcja(a + k, b, k, 1));
    if (a + k <= b)
      wynik = max(wynik, S[a + k] - S[a - 1] - funkcja(a + k + 1, b, k + 1, 1));
  } else {
    if (b - k + 1 >= a)
      wynik = max(wynik, S[b] - S[b - k] - funkcja(a, b - k, k, 0));
    if (b - k >= a)
      wynik = max(wynik, S[b] - S[b - k - 1] - funkcja(a, b - k - 1, k + 1, 0));
  }
  if (wynik == -inf) wynik = 0;
  return M[key] = wynik;
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  M.rehash(21212123);
  int n;
  cin >> n;
  int suma = 0;
  for (int i = 1; i <= n; i++) {
    cin >> T[i];
    suma += T[i];
    S[i] = suma;
  }
  cout << funkcja(1, n, 1, 0);
  return 0;
}
