#include <iostream>
#include<bits/stdc++.h>
#include<string>
using namespace std;
vector<vector<int>>DP[2];
vector<int>v;
int solve(int s,int e,bool me){
if(s>e) return 0;
if(DP[me][s][e]!=-1) return DP[me][s][e];
if(me) return DP[me][s][e]=max(solve(s+1,e,false)+v[s],solve(s,e-1,false)+v[e]);
return DP[me][s][e]=min(solve(s+1,e,true)-v[s],solve(s,e-1,true)-v[e]);
}
int getMaxScore(vector<int>nums){
v=nums;
DP[0]=DP[1]=vector<vector<int>>(nums.size()+1,vector<int>(nums.size()+1,-1));
int sum=0;
for(int i=0;i<nums.size();i++) sum+=v[i];
int deff=solve(0,nums.size()-1,true);
return (sum+deff)/2;
}
int main(){
vector<int>v({7, 6, -5, 4, 11, 1});
cout<<getMaxScore(v)<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZTxzdHJpbmc+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZlY3Rvcjx2ZWN0b3I8aW50Pj5EUFsyXTsKdmVjdG9yPGludD52OwppbnQgc29sdmUoaW50IHMsaW50IGUsYm9vbCBtZSl7CglpZihzPmUpIHJldHVybiAwOwoJaWYoRFBbbWVdW3NdW2VdIT0tMSkgcmV0dXJuIERQW21lXVtzXVtlXTsKCWlmKG1lKSByZXR1cm4gRFBbbWVdW3NdW2VdPW1heChzb2x2ZShzKzEsZSxmYWxzZSkrdltzXSxzb2x2ZShzLGUtMSxmYWxzZSkrdltlXSk7CglyZXR1cm4gRFBbbWVdW3NdW2VdPW1pbihzb2x2ZShzKzEsZSx0cnVlKS12W3NdLHNvbHZlKHMsZS0xLHRydWUpLXZbZV0pOwp9CmludCBnZXRNYXhTY29yZSh2ZWN0b3I8aW50Pm51bXMpewogICAgdj1udW1zOwoJRFBbMF09RFBbMV09dmVjdG9yPHZlY3RvcjxpbnQ+PihudW1zLnNpemUoKSsxLHZlY3RvcjxpbnQ+KG51bXMuc2l6ZSgpKzEsLTEpKTsKCWludCBzdW09MDsKCWZvcihpbnQgaT0wO2k8bnVtcy5zaXplKCk7aSsrKSBzdW0rPXZbaV07CiAgICBpbnQgZGVmZj1zb2x2ZSgwLG51bXMuc2l6ZSgpLTEsdHJ1ZSk7CiAgICByZXR1cm4gKHN1bStkZWZmKS8yOwp9CmludCBtYWluKCl7CiAgICB2ZWN0b3I8aW50PnYoezcsIDYsIC01LCA0LCAxMSwgMX0pOwogICAgY291dDw8Z2V0TWF4U2NvcmUodik8PGVuZGw7CiAgICByZXR1cm4gMDsKfQo=