#!/usr/bin/env python3

# université pierre et marie curie - c. dürr - 2017
# http://www-desir.lip6.fr/~durrc/Iut/cpa/2017/tme5-progdyn/

# explanation : http://tryalgo.org/en/games/2016/10/04/2player-zerosum-game/

# Compter le nombre de parenthésages booléens
# algorithme: prod-dyn sur une grille
# complexité: O(n^2)

from sys import stdin


def readint():
    return int(stdin.readline())

def readints():
    return list(map(int, stdin.readline().split()))

def readstrings():
    return stdin.readline().split()



def rowgame(L):
    """retourne la valeur que peut gagner le premier joueur
    si les deux joueurs jouent de manière optimale.

    problème:
        val[i][j] = valeur que le premier joueur peut obtenir
        si on joue sur l'intervalle L[i:j] (de i inclu à j exclu)
    pré-calcul:
        tot[i][j] = sum(L[i:j])
    cas de base:
        val[i][i] = 0 (car on joue sur un intervalle vide)
    récursion:
        val[i][j] = tot[i][j] - min( val[i + 1][j], val[i][j - 1])
    difficulté:
        évaluer val[i][j] dans l'ordre j-i croissant
    complexité:
        O(n^2) variables, évaluation en temps constant
    """
    n = len(L)
    val = [[0 for j in range(n)] for i in range(n)]
    tot = [[0 for j in range(n)] for i in range(n)]

    # --- cas de base
    for i in range(n):
        tot[i][i] = val[i][i] = L[i]

    # --- récursion
    for diff in range(1, n):
        for i in range(n - diff):
            j = i + diff
            tot[i][j] = tot[i][j-1] + tot[j][j]
            val[i][j] = tot[i][j] - min( val[i + 1][j], val[i][j - 1])
    return val[0][n-1]


n = readint()
L = [readint() for _  in range(n)]
print(rowgame(L))

