#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int N;
int A[ 1000 ] ;
int dp[ 1000 ] [ 1000 ] ;
int solve( int a, int b) {
int i;
int res = 0 ;
if ( a > b) {
return 0 ;
}
if ( a >= N) {
{
auto Lj4PdHRW = ( N) ;
a - = Lj4PdHRW;
b - = Lj4PdHRW;
}
}
if ( dp[ a] [ b] >= 0 ) {
return dp[ a] [ b] ;
}
for ( i= ( 3 ) ; i< ( b- a) ; i+ = ( 3 ) ) {
chmax( res, solve( a, a+ i- 1 ) + solve( a+ i, b) ) ;
}
for ( i= ( a+ 1 ) ; i< ( b) ; i+ = ( 3 ) ) {
chmax( res, A[ i] + solve( a+ 1 , i- 1 ) + solve( i+ 1 , b- 1 ) ) ;
}
return dp[ a] [ b] = res;
}
class Solution{
public :
int maxSizeSlices( vector< int > & slices) {
int i;
int res = - 1 ;
N = slices.size ( ) ;
for ( i= ( 0 ) ; i< ( 2 * N) ; i++ ) {
A[ i] = slices[ i % N] ;
}
for ( i= ( 0 ) ; i< ( 2 * N) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( 2 * N) ; j++ ) {
dp[ i] [ j] = - 1 ;
}
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
chmax( res, solve( i, i+ N- 1 ) ) ;
}
return res;
}
}
;
// cLay varsion 20200325-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int N, A[1000];
// int dp[1000][1000];
//
// int solve(int a, int b){
// int res = 0;
//
// if(a > b) return 0;
// if(a >= N) (a, b) -= N;
// if(dp[a][b] >= 0) return dp[a][b];
//
// rep(i,3,b-a,3) res >?= solve(a, a+i-1) + solve(a+i, b);
// rep(i,a+1,b,3) res >?= A[i] + solve(a+1, i-1) + solve(i+1, b-1);
//
// return dp[a][b] = res;
// }
//
// class Solution {
// public:
// int maxSizeSlices(vector<int>& slices) {
// int res = -1;
// N = slices.size();
// rep(i,2N) A[i] = slices[i % N];
// rep(i,2N) rep(j,2N) dp[i][j] = -1;
// rep(i,N) res >?= solve(i, i+N-1);
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWF4KFMgJmEsIFQgYil7CiAgaWYoYTxiKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgppbnQgTjsKaW50IEFbMTAwMF07CmludCBkcFsxMDAwXVsxMDAwXTsKaW50IHNvbHZlKGludCBhLCBpbnQgYil7CiAgaW50IGk7CiAgaW50IHJlcyA9IDA7CiAgaWYoYSA+IGIpewogICAgcmV0dXJuIDA7CiAgfQogIGlmKGEgPj0gTil7CiAgICB7CiAgICAgIGF1dG8gTGo0UGRIUlcgPSAoTik7CiAgICAgIGEgLT0gTGo0UGRIUlc7CiAgICAgIGIgLT0gTGo0UGRIUlc7CiAgICB9CiAgfQogIGlmKGRwW2FdW2JdID49IDApewogICAgcmV0dXJuIGRwW2FdW2JdOwogIH0KICBmb3IoaT0oMyk7aTwoYi1hKTtpKz0oMykpewogICAgY2htYXgocmVzLCBzb2x2ZShhLCBhK2ktMSkgKyBzb2x2ZShhK2ksIGIpKTsKICB9CiAgZm9yKGk9KGErMSk7aTwoYik7aSs9KDMpKXsKICAgIGNobWF4KHJlcywgQVtpXSArIHNvbHZlKGErMSwgaS0xKSArIHNvbHZlKGkrMSwgYi0xKSk7CiAgfQogIHJldHVybiBkcFthXVtiXSA9IHJlczsKfQpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgaW50IG1heFNpemVTbGljZXModmVjdG9yPGludD4mIHNsaWNlcyl7CiAgICBpbnQgaTsKICAgIGludCByZXMgPSAtMTsKICAgIE4gPSBzbGljZXMuc2l6ZSgpOwogICAgZm9yKGk9KDApO2k8KDIqTik7aSsrKXsKICAgICAgQVtpXSA9IHNsaWNlc1tpICUgTl07CiAgICB9CiAgICBmb3IoaT0oMCk7aTwoMipOKTtpKyspewogICAgICBpbnQgajsKICAgICAgZm9yKGo9KDApO2o8KDIqTik7aisrKXsKICAgICAgICBkcFtpXVtqXSA9IC0xOwogICAgICB9CiAgICB9CiAgICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgICAgY2htYXgocmVzLCBzb2x2ZShpLCBpK04tMSkpOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAyMDAzMjUtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBpbnQgTiwgQVsxMDAwXTsKLy8gaW50IGRwWzEwMDBdWzEwMDBdOwovLyAKLy8gaW50IHNvbHZlKGludCBhLCBpbnQgYil7Ci8vICAgaW50IHJlcyA9IDA7Ci8vIAovLyAgIGlmKGEgPiBiKSByZXR1cm4gMDsKLy8gICBpZihhID49IE4pIChhLCBiKSAtPSBOOwovLyAgIGlmKGRwW2FdW2JdID49IDApIHJldHVybiBkcFthXVtiXTsKLy8gCi8vICAgcmVwKGksMyxiLWEsMykgcmVzID4/PSBzb2x2ZShhLCBhK2ktMSkgKyBzb2x2ZShhK2ksIGIpOwovLyAgIHJlcChpLGErMSxiLDMpIHJlcyA+Pz0gQVtpXSArIHNvbHZlKGErMSwgaS0xKSArIHNvbHZlKGkrMSwgYi0xKTsKLy8gCi8vICAgcmV0dXJuIGRwW2FdW2JdID0gcmVzOwovLyB9Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbWF4U2l6ZVNsaWNlcyh2ZWN0b3I8aW50PiYgc2xpY2VzKSB7Ci8vICAgICBpbnQgcmVzID0gLTE7Ci8vICAgICBOID0gc2xpY2VzLnNpemUoKTsKLy8gICAgIHJlcChpLDJOKSBBW2ldID0gc2xpY2VzW2kgJSBOXTsKLy8gICAgIHJlcChpLDJOKSByZXAoaiwyTikgZHBbaV1bal0gPSAtMTsKLy8gICAgIHJlcChpLE4pIHJlcyA+Pz0gc29sdmUoaSwgaStOLTEpOwovLyAgICAgcmV0dXJuIHJlczsKLy8gICB9Ci8vIH07Cg==